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;
}
}
is_object
(PHP 4, PHP 5)
is_object — 変数がオブジェクトかどうかを検査する
説明
bool is_object ( mixed $var )与えられた変数がオブジェクトかどうかを調べます。
パラメータ
- var
評価する変数
返り値
もし var が object 型 の場合 TRUE、 そうでない場合は FALSE を返します。
注意
注意: クラス定義が存在しない場合に、 シリアライズされていないオブジェクトに対して使用すると (gettype() は object を返すにもかかわらず) この関数は FALSE を返します。
参考
| is_bool() |
| is_int() |
| is_float() |
| is_string() |
| is_array() |
is_object
peter at i-node dot com dot br
20-May-2006 05:03
20-May-2006 05:03
xixulon at gralgrathor dot nl
07-Jul-2005 08:30
07-Jul-2005 08:30
(addendum to function below: for clarity, don't forget to return false;)
corychristison[aT-]lavacube(.dot)com
03-Feb-2005 10:06
03-Feb-2005 10: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 08:49
02-Jan-2005 08: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
02-Jan-2005 12:47
02-Jan-2005 12: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 04:18
03-May-2003 04: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.