php7 其他語言層面的修改

2021-09-10 18:50:09 字數 1198 閱讀 4340

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

class a  

} // note: does not extend a

class b

} (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

intfloat

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; // 現在的語法解釋行為

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

四、其他的一些調整. 

移除了asp格式的支援和指令碼語法的支援:<% 和

不再支援對 new 的結果進行引用賦值。

移除了在非相容$this語境中對非靜態方法的作用域呼叫。參考資料:

ini檔案裡面不再支援#開頭的注釋,使用;。

$http_raw_post_data 變數被移除,使用php://input來代替。

php7 修改的函式

php 7 增加了可以為 unserialize 提供過濾的特性,可以防止非法資料進行 注入,提供了更安全的反序列化資料。例項 class myclass1 class myclass2 obj1 new myclass1 obj1 obj1prop 1 obj2 new myclass2 obj2...

php7 變數處理機制修改

一 間接變數 屬性和方法引用都按照從左到右的順序進行解釋 foo bar baz interpreted as foo bar baz foo bar baz interpreted as foo bar baz foo bar baz interpreted as foo bar baz foo ...

ecshop適應PHP7的修改及事務處理

但是自己沒有用。這種方式,用的是 action request act if action withdraw if mybank id 0 throw new exception 請填寫申請人 if repay money 0 else if repay money user moneys else...