其他語言層面的修改


一、在非相容$this情境中以靜態方式呼叫非靜態方法將不再支援。

在非相容$this語境中以靜態方式呼叫非靜態方法將不再支援。在這種場景下面,$this不會被定義,但調用還可以調用,但會有一個警告提示:

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

#注意這種情況適用於在非相容語境中調用。上面程式碼的例子中class B和class A沒有關係,所以呼叫的時候$this是沒有定義的。

但如果class B是從class A繼承的話,該呼叫是合法的。

二、下面的這些保留字不能用作類別名稱、介面名稱和trait名稱。

bool
int
float
string
null
false
true
下面這些關鍵字已經被留作將來使用,目前可以使用,不會報錯,但不建議。
resourceobject
mixed
numeric

三、yield語法調整

在表達式裡面使用yield語法結構的時候,不再需要括號了。它現在是一個右關聯的運算符,優先權介於"print"和"=>"運算子。在某些場景下面行為和之前會不一致。

echo yield -1;
echo (yield) - 1;  // 之前的语法解释行为
echo yield (-1);   // 现在的语法解释行为

yield $foo or die;
yield ($foo or die);  // 之前的语法解释行为
(yield $foo) or die;  // 现在的语法解释行为

可以透過括號來避免歧義。

備註:關於yield,大家可以參考鳥哥的這篇文章:http://www.laruence.com/2012/08/30/2738.html

四、其他的一些調整. 

移除了對ASP格式的支援和腳本語法的支援:<% 和<script language=php>

不再支援對new 的結果進行引用賦值。 (感謝Gazhikaba分享翻譯)

移除了在非相容$this情境中對非靜態方法的作用域呼叫。參考資料: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