---恢復內容開始---
後台一大堆半成品,或者是幾乎不成的。。。
這本書不錯,起碼是別人推薦的,然後也是比較新的東西,學哪本不是學嘛,關鍵是得看。
今兒個網不好,科研所需的代碼下不到,看書做筆記吧。
這本書基本將的是5.4版本後的一些新變化,寫的淺顯易懂,雖然鄙人走的還不順溜,跑一跑也摔不到哪兒去,跑累了我有的是走的機會~~
(一)特性
一、命名空間
一個文件一個類,用了命名空間方便互相調用;
1 // 2 //Namespace 3 // 4 namespace ModernPHP\feature\mingmingkongjian; 5 function var_dump(){ 6 echo "Shit!"."</br>"; 7 } 8 9 $test="OK"; 10 var_dump($test); 11 \ModernPHP\feature\mingmingkongjian\var_dump(); 12 13 //命名空間必須頂頭,但一個文件中可以有很多命名空間,然後也可以有子空間 14 //廠商的命名空間是最頂層的命名空間,用於識別品牌 15 //旨在解決命名沖突的問題,當然現在應該有比較靈活的其他用法 16 17 //一個比較實用的點:導入和別名 18 //導入另一個文件夾下的類定義,直接用 19 require 'index.php'; 20 use a\aaa; 21 $daoru=new aaa; 22 $daoru->send(); 23 //use是導入,然後在use中設置最懶的別名 24 //另外,5.6版本後可以實現use 函數 25 // use func a\call; 26 // \a\call();
index.php
1 <?php 2 namespace a; 3 class aaa{ 4 public function send(){ 5 echo "ok"; 6 } 7 } 8 9 function call(){ 10 echo "func_use is successful."; 11 }
二、使用接口
接口,本來沒太懂,看懂了之後簡直了,牛逼啊!
一個接口,大家只要遵守接口規定,就都能用,就這麼個意思。
下面是一個獲得內容的接口示例,還可以寫更多基於此接口的模塊;(其中,模塊中getContent的我基本都不會。。。哭)
<?php // //Chapter2.P19 //Feature_Interface // namespace ModernPHP\feature\jiekou; class DocumentStore{ protected $data=[]; public function addDocument(Documentable $document){ //這裡注明只能使用接口的參數 $key=$document->getID(); $value=$document->getContent(); $this->data[$key]=$value; } public function getDocuments(){ return $this->data; } } interface Documentable{ //定義接口,說白了就是定規矩,其他地方要用,就得說一聲 public function getId(); public function getContent(); } class HtmlDocument implements Documentable{ //聲明要用接口;這個是獲得url的內容的 protected $url; public function __construct($url){ $this->url=$url; } public function getId(){ return $this->url; } public function getContent(){ $ch=curl_init(); //這裡的curl是針對url進行操作一個庫(相當於)。這個命令是開啟一個curl對話,所以下面這些都是一個對話 curl_setopt($ch, CURLOPT_URL, $this->url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,3); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); curl_setopt($ch,CURLOPT_MAXREDIRS,3); $html=curl_exec($ch); //由這個命令執行剛才的對話 curl_close($ch); return $html; } } $documentStore=new DocumentStore(); $htmlDoc=new HtmlDocument('http://www.baidu.com'); $documentStore->addDocument($htmlDoc); print_r($documentStore->getDocuments());
另一個模塊
1 class StreamDocument implements Documentable{ //流媒體 2 protected $resource; 3 protected $buffer; //緩沖區大小 4 5 public function __construct($resource,$buffer=4096){ 6 $this->resource=$resource; 7 $this->buffer=$buffer; 8 } 9 10 public function getId(){ 11 return 'resource-'.(int)$this->resource; 12 } 13 14 public function getContent(){ 15 $streamContent=''; 16 rewind($this->resource); //rewind() 函數將文件指針的位置倒回文件的開頭 17 while (feof($this->resource)===false){ //feof() 函數檢測是否已到達文件末尾 (eof)。 18 $streamContent.=fread($this->resource,$this->buffer); 19 } 20 21 return $streamContent; 22 } 23 }
三、性狀
奇怪的東西。。。
其實就是為了多重繼承或者一對多個不同的類別吧
1 <?php 2 // 3 //Chapter2.P23 4 //Feature_Trait 5 //性狀 6 // 7 8 //前面說的接口,是針對同類型的東西,實現相同的功能的; 9 //這裡的性狀是針對不同的東西,實現相同的功能 10 11 //基本用法如下 12 trait traitName{ 13 public function testThis(){ 14 echo "This is how trait works."."<br/>"; 15 } 16 } 17 18 trait traitMore{ 19 public function testAgain(){ 20 echo "This is multiple use."."<br/>"; 21 } 22 } 23 24 class className{ 25 use traitName; 26 use traitMore; 27 28 } 29 30 $classMine=new className(); 31 $classMine->testThis(); 32 $classMine->testAgain();
四、生成器
直接上代碼
1 <?php 2 // 3 //Chapter2.P26 4 //Feature_Generator 5 //生成器 6 // 7 8 //其實就是在函數中使用了yield語句的東西 9 //優點在於節省了內存使用情況 10 //方法是通過動態分配內存進行循環操作 11 //典型用處是處理csv類數據文件 12 13 namespace ModernPHP\feature\shengchegnqi; 14 15 function getRows($file){ 16 $handle=fopen($file,'rb'); 17 if ($handle===false){ 18 throw new Exception(); //拋出錯誤原因 19 } 20 while (feof($handle)===false) { 21 yield fgetcsv($handle); 22 } 23 fclose($handle); 24 } 25 26 foreach (getRows('data.csv') as $row){ 27 print_r($row); 28 echo "<br/>"; 29 } 30 //當數據文件很大時,效果尤其明顯
五、閉包
這裡閉包基本等於匿名函數
1 <?php 2 // 3 //Chapter2.P29 4 //Feature_ClosePatch 5 //閉包或匿名函數 6 // 7 8 //把函數當作是變量 9 //然後它就可以像變量一樣用來用去了。。 10 //常用做函數和方法的回調 11 12 namespace ModernPHP\feature\bibao; 13 $var=function ($name){ 14 return sprintf('Hello %s',$name); 15 }; 16 17 echo $var('Andy'); 18 19 //做回調 20 $array=[2,3,4]; 21 $num=array_map(function ($number){ //array_map,將函數作用到數組中的每個值上,每個值都乘以本身,並返回帶有新值的數組 22 return $number+1; 23 },$array); 24 print_r($num);
六、附加狀態
這個沒搞懂。。。
(二)標准
PHP-FIG的一些約定俗成;
---類名稱,駝峰式,ShitHappens
---方法名稱,駝峰式,但首字母小寫,shitHappens
---縮進統一為4個空格
---不寫?>結束符號;
---{另起一行;
---命名空間要有空格;
---類中屬性和方法必須有可見性聲明;
---if等控制性結構後面有空格;
1 <?php 2 // 3 //Chapter3.P44 4 //PHP-FIG puts PSRs 5 // 6 7 namespace ModernPHP\standard\realize; 8 9 use ModernPHP\feature\bibao; 10 use ModernPHP\feature\fujiazhuangtai; 11 12 class ShitHappens 13 { 14 public $a; 15 16 public function suck() 17 { 18 if ($this->a===false){ 19 return true; 20 } 21 } 22 }
----------------------
後面的都是講述的東西,有需要的我再寫吧。