文字

is_object

(PHP 4, PHP 5, PHP 7)

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

描述

bool is_object ( mixed $var )

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

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

用户评论:

[#1] shadow_games at abv dot bg [2014-06-11 15:42:04]

here i created one function that i wanted to find but i had never found :X

function compare_two_object_recursive($object_1, $object_2, $object_1_Identifier = false, $object_2_Identifier = false){
$object1 = (array)$object_1;
$object2 = (array)$object_2;
$object3 = array();

$o1i = $object_1_Identifier ? $object_1_Identifier : 1;
$o2i = $object_2_Identifier ? $object_2_Identifier : 2;

foreach($object1 as $key => $value){
if(is_object($object1[$key])){
$object1[$key] = (array)$object1[$key];
$object2[$key] = (array)$object2[$key];
$object3[$key] = (object)compare_two_object_recursive($object1[$key], $object2[$key], $o1i, $o2i);
}elseif(is_array($object1[$key])){
$object3[$key] = compare_two_object_recursive($object1[$key], $object2[$key], $o1i, $o2i);
}else{
if($object1[$key] == $object2[$key]){
$object3[$key]['comparison_status'] = "SAME";
}else{
$object3[$key]['comparison_status'] = "NOT THE SAME";
$object3[$key][$o1i] = $object1[$key];
$object3[$key][$o2i] = $object2[$key];
}
}
}
return $object3;
}

[#2] mark at not4you dot com [2011-09-21 12:23:15]

Unserializes data as returned by the standard PHP serialize() function. If the unserialized object is not an array, it will be converted to one, particularily useful if it returns a __PHP_Incomplete_Class.

<?php

function unserialize2array($data) {
    
$obj unserialize($data);
    if(
is_array($obj)) return $obj;
    
$arr = array();
    foreach(
$obj as $k=>$v) {
        
$arr[$k] = $v;
    }
    unset(
$arr['__PHP_Incomplete_Class_Name']);
    return 
$arr;
}
?>

[#3] peter dot nagel at portavita dot nl [2011-03-22 01:46:48]

Note: is_object(null) returns false

This should actually be part of the input/output specification at the top of this page.

[#4] will [2010-03-20 14:36:22]

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

[#5] ldean at saleamp dot com [2009-09-01 07:16:07]

Use instanceof() to check for a specific type.

[#6] Senthryl [2009-03-17 06:03:03]

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)));
}
?>

[#7] gregdangelo at gmail dot com [2008-04-14 12:03:43]

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;
}

[#8] corychristison[aT-]lavacube(.dot)com [2005-02-02 17:06:59]

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.

[#9] victor AT fourstones DOT net [2005-01-01 15:49:38]

er, I don't think that's right, especially if calling from another object instance:

<?php

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

[#10] corychristison[aT-]lavacube(.dot)com [2005-01-01 07:47:56]

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!

[#11] lbjay can be emailed at reallywow dot com [2003-05-02 12:18:49]

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.

<?php
    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.

上一篇: 下一篇: