is_object

(PHP 4, PHP 5, PHP 7, PHP 8)

is_object変数がオブジェクトかどうかを検査する

説明

is_object(mixed $value): bool

与えられた変数がオブジェクトかどうかを調べます。

パラメータ

value

評価する変数。

返り値

もし valueobject型 の場合 true、 そうでない場合は false を返します。

変更履歴

バージョン 説明
7.2.0 クラス定義が存在せず (__PHP_Incomplete_Class クラス)、 かつシリアライズ化されていないオブジェクトに対して、 is_object() 関数は true を返すようになりました。 これより前のバージョンでは、false を返していました。

例1 is_object() の例

<?php
// オブジェクトから配列を返す
// シンプルな関数を宣言します
function get_students($obj)
{
    if (!
is_object($obj)) {
        return 
false;
    }

    return 
$obj->students;
}

// 新しいクラスのインスタンスを宣言し、
// 値を設定します
$obj = new stdClass();
$obj->students = array('Kalle''Ross''Felipe');

var_dump(get_students(null));
var_dump(get_students($obj));
?>

参考

  • is_bool() - 変数が boolean であるかを調べる
  • is_int() - 変数が整数型かどうかを検査する
  • is_float() - 変数の型が float かどうか調べる
  • is_string() - 変数の型が文字列かどうかを調べる
  • is_array() - 変数が配列かどうかを検査する

add a note add a note

User Contributed Notes 12 notes

up
81
peter dot nagel at portavita dot nl
13 years ago
Note: is_object(null) returns false

This should actually be part of the input/output specification at the top of this page.
up
7
mark at not4you dot com
12 years ago
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
/**
*
* @param string $data Serialized data
*
* @return array    Unserialized array
*/
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;
}
?>
up
5
corychristison[aT-]lavacube(.dot)com
19 years ago
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.
up
7
corychristison[aT-]lavacube(.dot)com
19 years ago
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!
up
5
lbjay can be emailed at reallywow dot com
21 years ago
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.
up
1
will
14 years ago
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
up
1
victor AT fourstones DOT net
19 years ago
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
up
-1
Senthryl
15 years ago
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)));
}
?>
up
-2
gregdangelo at gmail dot com
16 years ago
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;
}
up
-1
wadih at creationmw dot com
6 years ago
Note that closures return true when passed to is_object():

<?php

echo
   
is_object(
        function(){return
"hello";}
    );

?>

Returns true (1)
up
-4
ldean at saleamp dot com
14 years ago
Use instanceof() to check for a specific type.
up
-2
shadow_games at abv dot bg
9 years ago
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;
    }
To Top