2012-02-03 49 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(); 
相關問題