PHP7新機能マニュアル
/ 其他語言層面的修改
其他語言層面的修改
其他語言層面的修改
一、在非兼容$this語境中以靜態(tài)方式調(diào)用非靜態(tài)方法將不再支持。
在非兼容$this語境中以靜態(tài)方式調(diào)用非靜態(tài)方法將不再支持。在這種場景下面,$this不會被定義,但調(diào)用還可以調(diào)用,但會有一個警告提示:
class A { public function test() { var_dump($this); } } // Note: Does NOT extend A class B { public function callNonStaticMethodOfA() { A::test(); } } (new B)->callNonStaticMethodOfA(); // Deprecated: Non-static method A::test() should not be called statically // Notice: Undefined variable $this NULL
注意這種情況適用于在非兼容語境中調(diào)用。上面代碼的例子中class B和class A沒有關(guān)系,所以調(diào)用的時候$this是沒有定義的。
但如果class B是從class A繼承的話,該調(diào)用是合法的。
二、下面的這些保留字不能用作類名、接口名和trait名。
bool int float string null false true下面這些關(guān)鍵字已經(jīng)被留作將來使用,目前可以使用,不會報錯,但不建議。
resourceobject mixed numeric
三、yield語法調(diào)整
在表達式里面使用yield語法結(jié)構(gòu)的時候,不再需要括號了。它現(xiàn)在是一個右關(guān)聯(lián)的操作符,優(yōu)先級介于"print"和"=>"操作符。在某些場景下面行為和之前會不一致。
echo yield -1; echo (yield) - 1; // 之前的語法解釋行為 echo yield (-1); // 現(xiàn)在的語法解釋行為 yield $foo or die; yield ($foo or die); // 之前的語法解釋行為 (yield $foo) or die; // 現(xiàn)在的語法解釋行為
可以通過括號來避免歧義。
備注:關(guān)于yield,大家可以參考鳥哥的這篇文章:http://www.laruence.com/2012/08/30/2738.html
四、其他的一些調(diào)整.
移除了ASP格式的支持和腳本語法的支持:<% 和 <script language=php>
不再支持對 new 的結(jié)果進行引用賦值。(感謝Gazhikaba分享翻譯)
移除了在非兼容$this語境中對非靜態(tài)方法的作用域調(diào)用。參考資料:https://wiki.php.net/rfc/incompat_ctx. http://www.laruence.com/2012/06/14/2628.html
ini文件里面不再支持#開頭的注釋,使用;。
$HTTP_RAW_POST_DATA 變量被移除,使用php://input來代替。https://wiki.php.net/rfc/remove_alternative_php_tags