1
我有以下代碼:是否有更簡潔的方式來檢查屬性是否存在,然後檢查它的值?
property_exists($foo,'bar') && 'x' === $foo->bar)
我想遠離@$foo->bar
語法遠,因爲它只是不好的形式。
但是我不想要有$foo
和bar
就行了兩次,似乎沒有必要。
我有以下代碼:是否有更簡潔的方式來檢查屬性是否存在,然後檢查它的值?
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