php notes

1. foreach中的引用php

<?php

$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
unset($value); // 最後取消掉引用
foreach ($arr as $value) {
    echo $value.", ";
}

?>

輸出2,4,6,8.html

若是去掉&就不對了:java

 1 <?php
 2 
 3 $arr = array(1, 2, 3, 4);
 4 foreach ($arr as $value) {
 5     $value = $value * 2;
 6 }
 7 
 8 unset($value); // 最後取消掉引用
 9 foreach ($arr as $value) {
10     echo $value.", ";
11 }
12 
13 ?>

輸出1,2,3,4mysql

 

 2. foreach基本用法:[ref]laravel

 

1 <?php
2 $arr_age = array("wang"=>18, "li"=>20, "zhang"=>25);
3 foreach ($arr_age as $age) {
4     echo $age,'<br />';
5 }
6 ?>

運行該例子輸出:git

18
20
25

1 <?php
2 $arr_age = array("wang"=>18, "li"=>20, "zhang"=>25);
3 foreach ($arr_age as $key=>$age) {
4     echo $key,': ',$age,'<br />';
5 }
6 ?>

運行例子輸出:github

wang: 18
li: 20
zhang: 25


3. unset()函數銷燬變量 [ref]sql

4. PHP類中set和get方法 [ref]數據庫

5. PHP操做數據庫 [ref]segmentfault

6. 繼承 extends

PHP中繼承是單一繼承,不一樣於C++中的多繼承。

7. self

self相似與$this關鍵字,但$this是須要類實例化之後纔可使用,self 能夠直接訪問當前類中的內部成員。

注意:由於沒有實例化的類訪問內部屬性或者方法是沒有意義的,因此self通常用來訪問類中的:靜態成員,常量,或者其餘定義內容。

可參看此文

8. static

static能夠在類未被實例化時使用,靜態屬性單獨佔用內存而不會因建立多個對象而致使一樣的方法或者屬性重複佔用。

-- 類內部訪問靜態成員:

類名稱 : : 靜態成員
self : : 靜態成員

-- 類外部訪問靜態成員:

類名稱 : : 靜態成員

 9. const

const用來定義類中的常量,相似PHP外部定義常量的關鍵字define();

常量不用$符。

 10. 接口 interface

接口:一種成員屬性所有爲抽象的特殊抽象類。

---接口和抽象類之間的區別:

-抽象類:

1、類中至少有一個抽象方法
2、抽象方法前需加abstract

-接口:

1、類中所有爲抽象方法
2、抽象方法前不用加abstract
3、接口抽象方法屬性爲public
四、成員屬性必須爲常量
View Code

---接口和抽象類之間的共同點:

1、自己都不能被實例化,必須被繼承或者引用
二、繼承或者引用後,須要把全部抽象方法重載方可以使用
View Code

注意接口引用implement與類繼承extends的區別。繼承只能是單一性,接口的implement引用能夠有多個引用。

 繼承父類、引用接口 並存時:先繼承後接口。

接口也能夠extends繼承接口。

 

其餘屬性能夠看一下php100的ppt。

 11. php源代碼文件的組織、引用

參考《PHP和MySQL Web開發》的Ch5,有詳細講require和include。

 12. use用法 [ref]

 13. composer [ref]

 14. 3個等號:[ref]

簡單的說,兩個等號是模糊等於也就是通常的等於,在php中不一樣的類型也是能夠比較的,而這點在其餘的強類型語言中是不行的。三個等號表示全等於,不但數值同樣,並且類型也相同

好比你一個函數會返回這幾種狀況:
1、大於0的數
2、小於0的數
3、等於0的數(也就是0啦)
四、False(失敗時)
這時候若是你想捕獲失敗的狀況,你就必須用===,而不能用==
由於==除了會匹配第4種狀況外,還會匹配第3種狀況,由於0也是假!
View Code

 15. 匿名函數 closure [ref  ref2(贊)]

 16. trait [ref]

對於PHP來說,在使用use關鍵字時,PHP只是將trait的全部變量與函數「複製」進class內,讓class馬上擁有trait的全部功能。

[ref2]寫的很清晰,推薦。

 

 17. 依賴注入 [ref  ref2]

依賴倒置原則、控制反轉[ref] (這篇講的最清晰!)

依賴倒置原則(Dependence Inversion Principle, DIP)
DIP是一種軟件設計的指導思想。傳統軟件設計中,上層代碼依賴於下層代碼,當下層出現變更時, 上層代碼也要相應變化,維護成本較高。而DIP的核心思想是上層定義接口,下層實現這個接口, 從而使得下層依賴於上層,下降耦合度,提升整個系統的彈性。這是一種經實踐證實的有效策略。

控制反轉(Inversion of Control, IoC)
IoC就是DIP的一種具體思路,DIP只是一種理念、思想,而IoC是一種實現DIP的方法。 IoC的核心是將類(上層)所依賴的單元(下層)的實例化過程交由第三方來實現。 一個簡單的特徵,就是類中不對所依賴的單元有諸如 new 的實例化語句。

依賴注入(Dependence Injection, DI)
DI是IoC的一種設計模式,是一種套路,按照DI的套路,就能夠實現IoC,就能符合DIP原則。 DI的核心是把類所依賴的單元的實例化過程,放到類的外面去實現。
View Code
https://www.sitepoint.com/dependency-injection-with-pimple/

Class A depends on class B. If class B is not available then the above code will not work.

Moreover, every time we hard code the creation of an object inside a class, we are making a concrete dependency to that class. Concrete dependencies are a barrier to writing testable code. A better way is to provide an object of class B to class A. These objects can be provided through A’s constructor or a setter method.
View Code

ref 這篇講的也很是好!

總結:當A須要B時,不要直接在A裏new (), 而是傳遞一個B的對象做爲參數給A。

---------------------------------------- ----------------------------------------  ---------------------------------------- ---------------------------------------- 

真實的容器能夠實現自動綁定(Autowiring)或 自動解析(Automatic Resolution)、註釋解器(Annotations)、延遲注入(Lazy injection)等功能,都要學習一下。

pimple容器:ref

 

 注意,在用pimple時,和使用普通的匿名函數並不同。

ref3的這段代碼爲例:

$container['session_storage'] = function ($c) {
    return new SessionStorage('SESSION_ID');
};

$container['session'] = function ($c) {
    return new Session($c['session_storage']);
};

先看其中第一段代碼,若是是對於匿名函數而言,$x = function($param){SOME CODE}; 那麼$x裏存的是匿名函數自己。匿名函數並不執行,只有在出現「$x(參數)」時才執行。

可是在這裏,

$container['session_storage'] = function ($c) {SOME CODE};

這裏=右邊的部分,當前container會做爲參數傳遞給$c, 並執行該匿名函數,而後將該匿名函數的返回值new SessionStorage('SESSION_ID')存入container('session_storage')裏。

 

18. 容器

對容器賦值並非像C++那樣賦值,而是把部分東西

19. 魔術常量 [ref]

20. 後期靜態綁定 [ref]

 21. 幾種設計模式:工廠,DAO,xxx

ref

<head first設計模式>

22. php反射機制 [ref]

 23. pimple庫的用法:ref

 24. monolog 【ref

 25.

<1> PDO

PDO和prepared statement介紹[ref0]

prepared statement 預處理語句 [ref]

 

<2>FluentPDO [ref] 寫的很是好!

fluentPDO在test裏看實例,有doc裏沒說過的用法。

 26.

<1> DAO & VO [ref] (此文超級贊)

DAO+VO組成MVC中的Model。(ref中說的)

能夠google一下"php dao"看一下其餘相關文章,能學到更多知識。

 [ref]爲yiiframework裏面對DAO的介紹。

<2> MVC模式/框架 (Model-view-controller) 

 PHP MVC框架:ref

 yii doc中介紹MVC: ref

27. PHP相關設計模式 [ref]

28. yii framework [ref   ref2]

 admin intro: [ref3]

相關文章
相關標籤/搜索