is_object

(PHP 3, PHP 4, PHP 5)

is_object -- 检测变量是否是一个对象

描述

bool is_object ( mixed var )

如果 var 是一个 object 则返回 TRUE,否则返回 FALSE

参见 is_bool()is_int()is_integer()is_float()is_string()is_array()


add a note add a note User Contributed Notes
peter at i-node dot com dot br
20-May-2006 04:03
Optimizing the is_obj() from corychristison, and with the "return false" suggested by xixulon.

function is_obj( &$object, $check=null, $strict=true )
{
  if (is_object($object)) {
     if ($check == null) {
         return true;
     } else {
           $object_name = get_class($object);
           return ($strict === true)?
               ( $object_name == $check ):
               ( strtolower($object_name) == strtolower($check) );
     }   
  } else {
     return false;
  }
}
xixulon at gralgrathor dot nl
07-Jul-2005 07:30
(addendum to function below: for clarity, don't forget to return false;)
corychristison[aT-]lavacube(.dot)com
03-Feb-2005 09:06
Thank you victor AT fourstones DOT net.

I have written a function to do what victor has suggested, with the ease of use of is_object. It can be used to replace is_object(), but has an extra field [$check], to compare to a certain name. If $check is left empty, it will just check if &$object is an object.

<?php

function is_obj( &$object, $check=null, $strict=true )
{
   if(
$check == null && is_object($object) )
   {
       return
true;
   }
   if(
is_object($object) )
   {
      
$object_name = get_class($object);
       if(
$strict === true )
       {
           if(
$object_name == $check )
           {
               return
true;
           }
       }
       else
       {
           if(
strtolower($object_name) == strtolower($check) )
           {
               return
true;
           }
       }
   }
}

?>

This could probably be cleaned up, but it's spaced out to be easy to read.
victor AT fourstones DOT net
02-Jan-2005 07:49
er, I don't think that's right, especially if calling from another object instance:

<?

function test_this()
{
  
$c2 = new C2();
  
$c2->func();
  
$c1 = new C1();
  
$c1->func();
  
C1::func();
}

class
C2
{
   function
func()
   {
      
C1::func();
   }
}

class
C1
{
   function
func()
   {
       if( isset(
$this) )
       {
           if(
strtolower(get_class($this)) != 'c1' )
               print(
"oops\n");
           else
               print(
"this is ok\n" );
       }
       else
       {
           print(
"static call\n");
       }
   }
}

test_this();
?>

yields:
---------- run-php ----------

oops
this is ok
static call
corychristison[aT-]lavacube(.dot)com
01-Jan-2005 11:47
You can use is_object($this) to detect if the function is being called via instance or procedure.

Example:

<?php

class mrClass {

   function
test( )
   {
       if(
is_object($this) )
       {
        
// do something for instance method
          
echo 'this is an instance call <br />' . "\n";
       }
       else
       {
        
// do something different for procedural method
          
echo 'this is a procedure call <br />' . "\n";
       }
   }

}

$inst = new mrClass();
$inst->test();

mrClass::test();

?>

This would output:
this is an instance call <br />
this is a procedure call <br />

:-) Happy coding!
lbjay can be emailed at reallywow dot com
03-May-2003 03:18
I'm not even sure how to articulate this, so I'm going to just include test code. Maybe someone else will someday wonder the same thing.

<?
   error_reporting
(E_ALL);
   class
testParent
  
{
       var
$child;

       function
testParent()
       {
          
$this->child = new testChild();
       }
   }

   class
testChild
  
{
       function
testChild()
       {
       }
   }

  
$parent = new testParent();
  
$parent2 = 'foobar';

   print
join(',', Array(
      
is_object($parent) ? 'yes' : 'no',
      
is_object($parent->child) ? 'yes' : 'no',
      
is_object($parent2) ? 'yes' : 'no',
      
is_object($parent2->child) ? 'yes' : 'no'
  
));

?>

This prints "yes,yes,no,no". Basically this shows that you can use is_object to test if the child object is an object without worrying about an error if the parent object isn't an object either.