MordenPHP阅读笔记(一)——先跑再说,跑累了再走,mordenphp先跑_PHP教程
MordenPHP閱讀筆記(一)——先跑再說,跑累了再走,mordenphp先跑
---恢復(fù)內(nèi)容開始---
后臺一大堆半成品,或者是幾乎不成的。。。
這本書不錯,起碼是別人推薦的,然后也是比較新的東西,學(xué)哪本不是學(xué)嘛,關(guān)鍵是得看。
今兒個網(wǎng)不好,科研所需的代碼下不到,看書做筆記吧。
這本書基本將的是5.4版本后的一些新變化,寫的淺顯易懂,雖然鄙人走的還不順溜,跑一跑也摔不到哪兒去,跑累了我有的是走的機(jī)會~~
(一)特性
一、命名空間
一個文件一個類,用了命名空間方便互相調(diào)用;
1 //
2 //Namespace
3 //
4 namespace ModernPHP\feature\mingmingkongjian;
5 function var_dump(){
6 echo "Shit!"."";
7 }
8
9 $test="OK";
10 var_dump($test);
11 \ModernPHP\feature\mingmingkongjian\var_dump();
12
13 //命名空間必須頂頭,但一個文件中可以有很多命名空間,然后也可以有子空間
14 //廠商的命名空間是最頂層的命名空間,用于識別品牌
15 //旨在解決命名沖突的問題,當(dāng)然現(xiàn)在應(yīng)該有比較靈活的其他用法
16
17 //一個比較實用的點:導(dǎo)入和別名
18 //導(dǎo)入另一個文件夾下的類定義,直接用
19 require 'index.php';
20 use a\aaa;
21 $daoru=new aaa;
22 $daoru->send();
23 //use是導(dǎo)入,然后在use中設(shè)置最懶的別名
24 //另外,5.6版本后可以實現(xiàn)use 函數(shù)
25 // use func a\call;
26 // \a\call();
登錄后復(fù)制
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 }
登錄后復(fù)制
二、使用接口
接口,本來沒太懂,看懂了之后簡直了,牛逼啊!
一個接口,大家只要遵守接口規(guī)定,就都能用,就這么個意思。
下面是一個獲得內(nèi)容的接口示例,還可以寫更多基于此接口的模塊;(其中,模塊中g(shù)etContent的我基本都不會。。。哭)
<?php
//
//Chapter2.P19
//Feature_Interface
//
namespace ModernPHP\feature\jiekou;
class DocumentStore{
protected $data=[];
public function addDocument(Documentable $document){ //這里注明只能使用接口的參數(shù)
$key=$document->getID();
$value=$document->getContent();
$this->data[$key]=$value;
}
public function getDocuments(){
return $this->data;
}
}
interface Documentable{ //定義接口,說白了就是定規(guī)矩,其他地方要用,就得說一聲
public function getId();
public function getContent();
}
class HtmlDocument implements Documentable{ //聲明要用接口;這個是獲得url的內(nèi)容的
protected $url;
public function __construct($url){
$this->url=$url;
}
public function getId(){
return $this->url;
}
public function getContent(){
$ch=curl_init(); //這里的curl是針對url進(jìn)行操作一個庫(相當(dāng)于)。這個命令是開啟一個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); //由這個命令執(zhí)行剛才的對話
curl_close($ch);
return $html;
}
}
$documentStore=new DocumentStore();
$htmlDoc=new HtmlDocument('http://www.baidu.com');
$documentStore->addDocument($htmlDoc);
print_r($documentStore->getDocuments());
登錄后復(fù)制
另一個模塊
1 class StreamDocument implements Documentable{ //流媒體
2 protected $resource;
3 protected $buffer; //緩沖區(qū)大小
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() 函數(shù)將文件指針的位置倒回文件的開頭
17 while (feof($this->resource)===false){ //feof() 函數(shù)檢測是否已到達(dá)文件末尾 (eof)。
18 $streamContent.=fread($this->resource,$this->buffer);
19 }
20
21 return $streamContent;
22 }
23 }
登錄后復(fù)制
三、性狀
奇怪的東西。。。
其實就是為了多重繼承或者一對多個不同的類別吧
1 <?php
2 //
3 //Chapter2.P23
4 //Feature_Trait
5 //性狀
6 //
7
8 //前面說的接口,是針對同類型的東西,實現(xiàn)相同的功能的;
9 //這里的性狀是針對不同的東西,實現(xiàn)相同的功能
10
11 //基本用法如下
12 trait traitName{
13 public function testThis(){
14 echo "This is how trait works."."
";
15 }
16 }
17
18 trait traitMore{
19 public function testAgain(){
20 echo "This is multiple use."."
";
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();
登錄后復(fù)制
四、生成器
直接上代碼
1 <?php
2 //
3 //Chapter2.P26
4 //Feature_Generator
5 //生成器
6 //
7
8 //其實就是在函數(shù)中使用了yield語句的東西
9 //優(yōu)點在于節(jié)省了內(nèi)存使用情況
10 //方法是通過動態(tài)分配內(nèi)存進(jìn)行循環(huán)操作
11 //典型用處是處理csv類數(shù)據(jù)文件
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 "
";
29 }
30 //當(dāng)數(shù)據(jù)文件很大時,效果尤其明顯
登錄后復(fù)制
五、閉包
這里閉包基本等于匿名函數(shù)
1 <?php
2 //
3 //Chapter2.P29
4 //Feature_ClosePatch
5 //閉包或匿名函數(shù)
6 //
7
8 //把函數(shù)當(dāng)作是變量
9 //然后它就可以像變量一樣用來用去了。。
10 //常用做函數(shù)和方法的回調(diào)
11
12 namespace ModernPHP\feature\bibao;
13 $var=function ($name){
14 return sprintf('Hello %s',$name);
15 };
16
17 echo $var('Andy');
18
19 //做回調(diào)
20 $array=[2,3,4];
21 $num=array_map(function ($number){ //array_map,將函數(shù)作用到數(shù)組中的每個值上,每個值都乘以本身,并返回帶有新值的數(shù)組
22 return $number+1;
23 },$array);
24 print_r($num);
登錄后復(fù)制
六、附加狀態(tài)
這個沒搞懂。。。
(二)標(biāo)準(zhǔn)
PHP-FIG的一些約定俗成;
---類名稱,駝峰式,ShitHappens
---方法名稱,駝峰式,但首字母小寫,shitHappens
---縮進(jìn)統(tǒng)一為4個空格
---不寫?>結(jié)束符號;
---{另起一行;
---命名空間要有空格;
---類中屬性和方法必須有可見性聲明;
---if等控制性結(jié)構(gòu)后面有空格;
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 }
登錄后復(fù)制
----------------------
后面的都是講述的東西,有需要的我再寫吧。
http://www.bkjia.com/PHPjc/1121987.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1121987.htmlTechArticleMordenPHP閱讀筆記(一)——先跑再說,跑累了再走,mordenphp先跑 ---恢復(fù)內(nèi)容開始--- 后臺一大堆半成品,或者是幾乎不成的。。。 這本書不...
總結(jié)
以上是生活随笔為你收集整理的MordenPHP阅读笔记(一)——先跑再说,跑累了再走,mordenphp先跑_PHP教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Timer与ScheduledExecu
- 下一篇: 《逆战》9月新版本56式半自动步枪属性图