是否有更简洁的方式来检查属性是否存在,然后检查它的值?
问题描述:
我有以下代码:是否有更简洁的方式来检查属性是否存在,然后检查它的值?
property_exists($foo,'bar') && 'x' === $foo->bar)
我想远离@$foo->bar
语法远,因为它只是不好的形式。
但是我不想要有$foo
和bar
就行了两次,似乎没有必要。
答
你可以写一个函数来做到这一点:
class Foo {
public $bar;
function isset_and_equals($name, $value) {
return property_exists($this, $name) && $this->$name === $value;
}
}
$foo = new Foo;
var_dump($foo->isset_and_equals('bar', 'x')); // false
$foo->bar = 'x';
var_dump($foo->isset_and_equals('bar', 'x')); // true
答
你可以写一个函数 - 也许需要一个为每个属性,或者可能有打压的错误,当你在属性传递(因为它可能不存在) - 我会做这样(未经):
function checkBar($object, $xValue){
if(isset($object->bar) && $object->bar === $xValue) return true;
return false;
}
用法:
if(checkBar($foo)) dostuff();
写一个函数f的想法或者这个目的很好,但是有没有办法可以避免?希望这样做很简单,我希望有一些更简洁的语言级别的支持。 – Matthew 2012-02-04 00:23:35
您可以通过初始化所有属性来避免整个问题。 – Aerik 2012-02-04 00:39:27
我不能在这里做到这一点,其中一些是动态创建的,如果我不需要它们,我不希望它们混淆我的对象。我想这是权衡。 – Matthew 2012-02-04 01:33:32