(PHP 4, PHP 5)
is_object — Prüft, ob eine Variable vom Typ object ist
Die zu untersuchende Variable.
Gibt TRUE zurück, wenn var vom Typ object ist, ansonsten FALSE.
Beispiel #1 is_object()-Beispiel
<?php
// Eine einfache Funktion deklarieren, die ein Array unseres Objekts zurückgibt
function get_students($obj)
{
    if (!is_object($obj)) {
        return false;
    }
    return $obj->students;
}
// Deklarieren einer neuen Instanz der Klasse und Befüllen mit Werten
$obj = new stdClass();
$obj->students = array('Kalle', 'Ross', 'Felipe');
var_dump(get_students(null));
var_dump(get_students($obj));
?>
Hinweis:
Die Funktion wird FALSE zurückgeben, wenn sie auf ein unserialisiertes Objekt angewendet wird, dessen Klassendefinition nicht geladen ist (auch wenn gettype() object zurückgibt).
Just discovered:
is_a  (  object $object  ,  string $class_name  )
Which checks if the object is of this class or has this class as one of its parents
Which seems to do what a lot here are trying to replicate
Cleaning it up even more:
<?php
function is_obj(&$object, $className = null, $caseSensitive = true) {
    return is_object($object) && (!is_string($className) || preg_match('/^'.$className.'$/D'.($caseSensitive ? '' : 'i'), get_class($object)));
}
?>
cleaned up peter's code... use only one return statement
function is_obj( &$object, $check=null, $strict=true )
{
$result = false;
  if (is_object($object)) {
      if ($check == null) {
          $result =  true;
      } else {
           $object_name = get_class($object);
           $result =  ($strict === true)?
               ( $object_name == $check ):
               ( strtolower($object_name) == strtolower($check) );
      }   
  }
return $result;
}
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;
  }
}
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.
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
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!
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.