本文目錄一覽:
php7中的php-fpm默認安裝在什麼地方
安裝後的PHP7配置文件所在路徑是 /usr/local/php7/etc 。該目錄下會有兩個配置文件: php-fpm.conf 和 php.ini ,以及一個文件夾 php-fpm.d (包含 文件)。
Php7有哪些新特性
PHP 7.4 的主要特性包括以下幾個,
短閉包函數(short closure) 預加載提交性能 屬性類型限定 Improved type variance(不會翻譯) 三元運算簡寫 數組展開運算 新增類的魔術方法:serialization 數字分隔符 運算優先順序 允許在__toString中拋出異常 支持反射引用 新增位元組分割函數 移除php短標籤 棄用左關聯運算符 不再向後兼容的變更 短閉包函數
短閉包函數可以減少冗餘代碼:
array_map(function (User $user) { return $user-id; }, $users) array_map(fn(User $user) = $user-id, $users)
需要注意幾點:
短閉包可以直接訪問閉包函數外面的變量,所以不需要再寫?use?關鍵詞 以fn關鍵詞開始 $this?可以像普通的閉包一樣使用 短閉包只有一行代碼,僅僅做返回聲明使用,不允許使用return?關鍵詞
還可以使用更嚴格類型的方式
$ids = array_map(fn(User $user): int = $user-id, $user); 預加載
PHP預加載可以極大的提高性能
優點:在PHP 7.4以前,如果你使用了框架來開發,每次請求文件就必須加載和重新編譯。預加載在框架啟動時在內存中加載文件,而且在後續請求中永久有效。
缺點:性能的提升會在其他方面花費很大的代價,每次預加載的文件發生改變時,框架需要重新啟動。
屬性類型限定 class A { public string $name; public Foo $foo; }
不得不說,PHP越來越接近Java等強類型語言
Improved type variance
協變返回類型:
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } }
依賴(是不是很熟悉):
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } } 簡寫三元運算符
在目前 PHP 7以後的寫法:
$data[‘date’] = $data[‘date’] ?? new DateTime(); 在PHP 7.4你可以這樣寫: $data[‘date’] ??= new DateTime(); 數組展開運算
合併數組到另一個數組中,返回一維數組
$arrayA = [1, 2, 3]; $arrayB = [4, 5]; $result = [0, …$arrayA, …$arrayB, 6 ,7]; // [0, 1, 2, 3, 4, 5, 6, 7]
注意? :只對數字索引有效
新增類的魔術方法
RFC添加了兩個新的魔術方法__serialize和__unserialize
數字分隔符
允許使用下劃線更直觀的分隔數值
$unformattedNumber = 107925284.88; $formattedNumber = 107_925_284.88; 運算優先順序
PHP 7.4之前,如果你這樣寫:
echo “sum: ” . $a + $b; PHP會解析為: echo (“sum: ” . $a) + $b; PHP 8將會解析為: echo “sum :” . ($a + $b); __toString中拋出異常支持反射引用
PHP 7.4將會新增ReflectionReference?類
移除php短標籤
?將會在PHP 8中移除,?=會繼續保留
棄用左關聯運算符
PHP遺留了一些奇怪的怪癖,比如
1 ? 2 : 3 ? 4 : 5; // 將會在 PHP 7.4 中廢棄,在 PHP 8中會拋出編譯錯誤 (1 ? 2 : 3) ? 4 : 5; // 正確 不再向後兼容的變更 棄用在沒有父類的情況下調用parent:: 調用var_dump打印DateTime和DateTimeImmutableshi』實例,將不再保留對象上的可訪問屬性 openssl_random_pseudo_bytes?會在調用錯誤時拋出異常 序列化PDO和PDOStatement?實例將會生成一個Exception而不是PDOException異常 調用get_object_vars()打印ArrayObject?實例將會返回ArrayObject?自己的屬性,而不是被包裹的數組或對象的值,
數組強制轉換不受影響
PHP7如何在php.ini文件中開啟自動轉義功能? php.ini中不包含magic-quote
首先說明下magic-quote在PHP5.4版本中就已經廢除了。詳情請參考:
1. magic_quotes_gpc和magic_quotes_runtime作用
magic_quotes_gpc主要是作用是自動轉義GET/POST/COOKIES請求的數據,也就是自動執行 addslashes()。magic_quotes_gpc在5.4版本之前的配置中有兩個值,分別是0(關閉)和1(開啟),默認配置是1(開啟)。
magic_quotes_runtime主要作用是自動轉移sql,為了防止惡意攻擊獲取數據庫信息。magic_quotes_runtime在5.4版本前的配置也有兩個值,分別是0(關閉)和1(開啟),默認配置是0(關閉)。
2. magic_quotes_gpc和magic_quotes_runtime的應用
假設提交過來的數據分別是$datastr= ‘aaa’; $datafile= implode(file(‘demo.txt’));第一個數據是一個字符串,第二個是讀取的文件信息,但是你不知道是否安全。就可以使用get_magic_quotes_gpc()和get_magic_quotes_runtime()進行判斷。
應用示例
注意:一般來說為了運行效率會將get_magic_quotes_gpc()和get_magic_quotes_runtime()設置成常量進行判斷
應用示例
原創文章,作者:RZAI,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/142336.html