摘要:今天無事,偶爾看到中的版本選擇處有關(guān)于各版本的區(qū)別的簡短描述,于是總結(jié)一下。相對于之前版本,最大區(qū)別也就是命名空間和匿名函數(shù)了,這在平時開發(fā)和各大框架中都用的比較多了,就不再詳述了。的主要更新是數(shù)組簡寫語法格式和了。
今天無事,偶爾看到phpstorm中的版本選擇處有關(guān)于各版本的區(qū)別的簡短描述,于是總結(jié)一下。
PHP5.3相對于之前版本,最大區(qū)別也就是命名空間和匿名函數(shù)了,這在平時開發(fā)和各大框架中都用的比較多了,就不再詳述了。
PHP5.4的主要更新是數(shù)組簡寫語法格式和traits了。
關(guān)于數(shù)組簡寫,說起來也挺簡單,只是為數(shù)組添加了一個新的聲明方法,如下:
// PHP5.4之前 $array = array( "foo" => "bar", "bar" => "foo", ); // 自 PHP 5.4 起 $array = [ "foo" => "bar", "bar" => "foo", ];
而關(guān)于PHP5.4的traits就比較少見了,代碼說明:
class Base { public function sayHello() { echo "Hello "; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo "World!"; } } class MyHelloWorld extends Base { use SayWorld; } $o = new MyHelloWorld(); $o->sayHello();
說明一下:結(jié)果是"Hello World!",從基類繼承的方法會被trait中的同名方法覆蓋,當(dāng)前類中的方法覆蓋trait中的同名成員;如果trait中定義了屬性,則當(dāng)前類中不能定義同名屬性;trait中也可以定義抽象方法和靜態(tài)成員。可以使用多個trait,它們之間用逗號分隔,如下:
use SayHello1,SayHello2;
如果SayHello1和SayHello2中有同名成員,會產(chǎn)生致命錯誤,解決方法如下:
use SayHello1,SayHello2 { SayHello1::sayHello insteadof SayHello2; // 意思是用SayHello1中的sayHello方法代替SayHello2中的同名方法,注:此處的sayHello不一定是靜態(tài)方法 // ... // 或 SayHello1::sayHello as sayHello1; // 為其另取一個名字,也可解決 }
PHP5.5中的變化主要是異常處理中添加finally關(guān)鍵字和生成器generator。
關(guān)于finally,代碼說明:
try { throw new ErrorException("Some Error Message"); } catch (ErrorException $e) { echo $e->getMessage()."111 "; } catch(Exception $e) { echo $e->getMessage()."222 "; } finally { echo "finally"; }
不管產(chǎn)沒產(chǎn)生異常,都會輸出finally。
關(guān)于生成器generator,我看了看手冊,不明覺厲。明白了再加上...
今天先到這兒......
關(guān)于generator,今天看到一篇文章(http://laravelacademy.org/post/4317.html),有些小體會,寫下來做個記錄,定義啥的就不說了,簡單說就是為了節(jié)約內(nèi)存
首先,創(chuàng)建生成器,類似函數(shù),但不返回值,只生成值,有點兒別扭
function getGenerator() { yield "I"; yield "am"; yield "Polly"; }
使用生成器,生成器的返回值是一個Generator對象
foreach (getGenerator() as $val) { echo $val . PHP_EOL; }
看到這里,有人會認(rèn)為,這和tm函數(shù)有毛區(qū)別,函數(shù)返回一個數(shù)組不照樣循環(huán)出來么,看下面的例子:
function makeRange1($length) { $dataSet = []; for ($i=0; $i<$length; $i++) { $dataSet[] = $i; } return $dataSet; } function makeRange2($length) { for ($i=0; $i<$length; $i++) { yield $i; } } // 分別執(zhí)行makeRange1(1000000)和makeRange2(1000000),便會看出來,第一個直接報錯,因為內(nèi)存占用過多,第二個則不會
用處,如果要讀取一個超大的文本文件,肯定是用生成器來的更快更節(jié)約內(nèi)存一些
function getRows($file) { $handle = fopen($file, "rb"); if ($handle == FALSE) { throw new Exception(); } while (feof($handle) === FALSE) { yield fgetcsv($handle); } fclose($handle); } foreach ($getRows($file) as $row) { print_r($row); }
ok
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21324.html
摘要:最近做的一個需求,要通過調(diào)用,以格式上傳文件。傳統(tǒng)上,的支持通過在數(shù)組數(shù)據(jù)中,使用文件全路徑的語法附加文件,供讀取上傳。的默認(rèn)值為,的默認(rèn)值為。對于而言,手動設(shè)置為是毫無意義的。命名空間或以下的版本沒有命名空間。 最近做的一個需求,要通過PHP調(diào)用cURL,以multipart/form-data格式上傳文件。踩坑若干,夠一篇文章了。 重要警告 沒事不要讀PHP的官方中文文檔!版本...
摘要:同時還支持簡寫的運算符,表示進(jìn)行冪運算并賦值。對應(yīng)的結(jié)構(gòu)為和。為了達(dá)到一致性將添加函數(shù)。新增函數(shù)可用來返回數(shù)組中指定的一列。這種簡寫形式被稱為在起被默認(rèn)開啟,在起總是可用。三元運算符可以簡寫省略中間的部分表達(dá)式,當(dāng)為時返回,否則返回。 PHP 5.6 1、可以使用表達(dá)式定義常量 https://php.net/manual/zh/migration56.new-features.p...
摘要:同時還支持簡寫的運算符,表示進(jìn)行冪運算并賦值。為了達(dá)到一致性將添加函數(shù)。新增函數(shù)可用來返回數(shù)組中指定的一列。這種簡寫形式被稱為在起被默認(rèn)開啟,在起總是可用。結(jié)構(gòu)中可以用雙引號來聲明標(biāo)識符了。 PHP 5.61、可以使用表達(dá)式定義常量 https://php.net/manual/zh/mig... 在之前的 PHP 版本中,必須使用靜態(tài)值來定義常量,聲明屬性以及指定函數(shù)參數(shù)默認(rèn)值。 現(xiàn)...
摘要:參考資料檢查當(dāng)前安裝的包如果有安裝的包,先刪除他們更新我們系統(tǒng)用這個如果想刪除上面安裝的包,重新安裝上面搜索到的包即可運行注如果想升級到把上面的換成就可以了。安裝注如果想升級到把上面的換成就可以了。 參考資料: http://www.blogjava.net/nkjav...http://www.111cn.net/sys/Cent... 1.檢查當(dāng)前安裝的PHP包 yum lis...
摘要:微軟前些日子公布了下簡稱,當(dāng)時還只有支持安裝,作為普通用戶的我就沒有嘗試。解決方案有待進(jìn)一步發(fā)掘。按照剛剛發(fā)布的報告,微軟已經(jīng)是開源貢獻(xiàn)第一大公司,擁抱之后我們也可以在下進(jìn)行開發(fā)了。 微軟前些日子公布了 Windows Subsystem Linux(下簡稱WSL),當(dāng)時還只有 Insider Preview 支持安裝,作為普通用戶的我就沒有嘗試。這兩天不知道伴隨哪次更新,標(biāo)準(zhǔn)的專業(yè)版...
閱讀 2004·2021-08-11 11:13
閱讀 1028·2021-07-25 21:37
閱讀 2583·2019-08-29 18:42
閱讀 2519·2019-08-26 12:18
閱讀 924·2019-08-26 11:29
閱讀 1697·2019-08-23 17:17
閱讀 2672·2019-08-23 15:55
閱讀 2615·2019-08-23 14:34