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