2012-02-03 59 views
1

我有以下代码:是否有更简洁的方式来检查属性是否存在,然后检查它的值?

property_exists($foo,'bar') && 'x' === $foo->bar) 

我想远离@$foo->bar语法远,因为它只是不好的形式。

但是我不想要有$foobar就行了两次,似乎没有必要。

+0

写一个函数f的想法或者这个目的很好,但是有没有办法可以避免?希望这样做很简单,我希望有一些更简洁的语言级别的支持。 – Matthew 2012-02-04 00:23:35

+0

您可以通过初始化所有属性来避免整个问题。 – Aerik 2012-02-04 00:39:27

+0

我不能在这里做到这一点,其中一些是动态创建的,如果我不需要它们,我不希望它们混淆我的对象。我想这是权衡。 – Matthew 2012-02-04 01:33:32

回答

1

你可以写一个函数来做到这一点:

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 
0

你可以写一个函数 - 也许需要一个为每个属性,或者可能有打压的错误,当你在属性传递(因为它可能不存在) - 我会做这样(未经):

function checkBar($object, $xValue){ 
    if(isset($object->bar) && $object->bar === $xValue) return true; 
    return false; 
} 

用法:

if(checkBar($foo)) dostuff();