讓我們考慮下面的代碼:「操作員」優先?爲什麼new Object() - > method()在PHP中給出語法錯誤?
<?php
class X{
public function test(){
return 'test';
}
}
//This obviously works:
$x = (new X())->test();
//This does not, syntax error
$x = new X()->test();
echo $x;
爲什麼?
BTW: 我知道它是在PHP 5.4
這不是介紹「如何」,它是關於「爲什麼」 - 我知道第一語法是一個在文檔中。其實,它更多的是在哪裏以及如何找到答案。
從我學會爲止,一邊問我的問題在其他地方:
的 - >並不是真正的「運營商」,這是一個「令牌」或「詞法標記」 - 這不利於我很多。
第一個版本等於說:「new(DateTime() - > format())」顯然是不好的。這表明它是關於「運算符優先級」,但是#1 - - >不是運算符(對吧?),#2 - 爲什麼這不記錄在任何地方?
順便說一下,在http://php.net/manual/en/language.operators.precedence.php我們可以看到,「新」操作符關聯既不是左也不是右,它沒有,我們也可以讀「非相關優先等值的操作符不能彼此相鄰使用,例如1 < 2> 1在PHP中是非法的「因此...如果 - >是一個運算符(並且它是非關聯的),那麼一切都會清楚,但它是一個運算符嗎?如果是,那麼爲什麼不列在上面的列表中(http://php.net/manual/en/language.operators.precedence.php)?
相關,雖然不是很有幫助:http://stackoverflow.com/questions/34377118/is-there-a-way-to-create-an-anonymous-object-in-php/34377153#comment57161837_34377153 – Paulpro
是的,感謝@Paulpro - 似乎沒有答案,我只需要忍受那:)再次感謝! – konrados
「不得不忍受它」是一個典型的結論,任何事情都與PHP的解析器有關...... – deceze