PHP检查属性是否存在于对象或类property_exists(mixed $ class,string $ property)isset(mixed $ var [,mixed $ ...])(代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP检查属性是否存在于对象或类property_exists(mixed $ class,string $ property)isset(mixed $ var [,mixed $ ...])(代码相关的知识,希望对你有一定的参考价值。
我理解php没有纯对象变量,但我想检查一个属性是否在给定的对象或类中。
$ob = (object) array('a' => 1, 'b' => 12);
要么
$ob = new stdClass;
$ob->a = 1;
$ob->b = 2;
在JS中,我可以写这个来检查对象中是否存在变量a
:
if ('a' in ob)
在PHP中,可以做这样的事吗?
非常感谢您的建议。
property_exists( mixed $class , string $property )
if (property_exists($ob, 'a'))
isset( mixed $var [, mixed $... ] )
if (isset($ob->a))
如果property为null,则isset()将返回false
例1:
$ob->a = null
var_dump(isset($ob->a)); // false
例2:
class Foo
{
public $bar = null;
}
$foo = new Foo();
var_dump(property_exists($foo, 'bar')); // true
var_dump(isset($foo->bar)); // false
要检查属性是否存在以及它是否为null,您可以使用函数property_exists()
。
文件:http://php.net/manual/en/function.property-exists.php
与isset()相反,即使属性值为NULL,property_exists()也返回TRUE。
bool property_exists(混合$ class,string $ property)
例:
if (property_exists($testObject, $property)) {
//do something
}
isset或property_exists都不适合我。
- 如果属性存在但是为NULL,则isset返回false。
- 如果属性是对象的类定义的一部分,则property_exists返回true,即使它已被取消设置也是如此。
我结束了:
$exists = array_key_exists($property, get_object_vars($obj));
例:
class Foo {
public $bar;
function __construct() {
$property = 'bar';
isset($this->$property); // FALSE
property_exists($this, $property); // TRUE
array_key_exists($property, get_object_vars($this)); // TRUE
unset($this->$property);
isset($this->$property); // FALSE
property_exists($this, $property); // TRUE
array_key_exists($property, get_object_vars($this)); // FALSE
$this->$property = 'baz';
isset($this->$property); // TRUE
property_exists($this, $property); // TRUE
array_key_exists($property, get_object_vars($this)); // TRUE
}
}
如果您想知道某个属性是否存在于已定义的类的实例中,只需将property_exists()
与isset()
组合即可。
public function hasProperty($property)
{
return property_exists($this, $property) && isset($this->$property);
}
echo $person->middleName ?? 'Person does not have a middle name';
要么
if($person->middleName ?? false) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
说明
检查某些东西存在的传统PHP方法是:
if(isset($person->middleName)) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
或者更具体的方法:
if(property_exists($person, 'middleName')) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
这些在长篇陈述中都很好,但在三元陈述中,它们变得不必要地繁琐isset($person->middleName) ? echo $person->middleName : echo 'Person does not have a middle name';
您也可以使用像echo $person->middleName ?: 'Person does not have a middle name';
这样的三元运算符来实现这一点,但如果该值不存在(未设置),则会引发E_NOTICE并且不是最佳实践。如果值为null
,则不会引发异常。
因此三元运营商为救援做出了一个简洁的小答案:
echo $person->middleName ?? 'Person does not have a middle name';
要检查是否存在某些内容,可以使用PHP函数isset()see php.net。此函数将检查变量是否已设置且不为NULL。
例:
if(isset($obj->a))
{
//do something
}
如果需要检查类中是否存在属性,则可以使用构建函数property_exists()
例:
if (property_exists('class', $property)) {
//do something
}
以上是关于PHP检查属性是否存在于对象或类property_exists(mixed $ class,string $ property)isset(mixed $ var [,mixed $ ...])(代码的主要内容,如果未能解决你的问题,请参考以下文章