**1 面向對象:**
1 php5特性:
訪問控制,抽象類和final方法;附加的魔術方法,接口,對象復制和類型約束
2 偽變量:
$this:(1)用$this調用對象中的其他方法
(2)使用$this調用構造函數
$this就是指當前對象
3 繼承
php不支持多重繼承,若定義方法時使用了final,則該方法不可被覆蓋。可以通過 parent:: 來訪問被覆蓋的方法或屬性。
4 類名解析:
自 PHP 5.5 起,關鍵詞 class 也可用于類名的解析。使用 ClassName::class 你可以獲取一個字符串,包含了類 ClassName 的完全限定名稱。這對使用了 命名空間 的類尤其有用。
** 接口**
使用接口(interface),可以指定某個類必須實現哪些方法,但不需要定義這些方法的具體內容。
接口是通過 interface 關鍵字來定義的,就像定義一個標準的類一樣,但其中定義所有的方法都是空的。
接口中定義的所有方法都必須是公有,這是接口的特性。
http://php.net/manual/zh/language.oop5.interfaces.php
5 類的自動加載:
spl_autoload_register() 可以注冊任意數量的自動加載器,當使用尚未定義的類和接口時會自動加載;
_ _aotoload函數也能自動加載類和接口
*6 構造函數和析構函數
Note: 如果子類中定義了構造函數則不會隱式調用其父類的構造函數。要執行父類的構造函數,需要在子類的構造函數中調用 parent::_ _construct()。如果子類沒有定義構造函數則會如同一個普通的類方法一樣從父類繼承(假如沒有被定義為 private 的話)。*\
析構函數:
<?php
class MyDestructableClass {
function __construct() {
print "In constructor\n";
$this->name = "MyDestructableClass";
}
function __destruct() {
print "Destroying " . $this->name . "\n";
}
}
$obj = new MyDestructableClass();
?>
和構造函數一樣,父類的析構函數不會被引擎暗中調用。要執行父類的析構函數,必須在子類的析構函數體中顯式調用 parent::_ _destruct()。此外也和構造函數一樣,子類如果自己沒有定義析構函數則會繼承父類的。
7 范圍解析操作符
范圍解析操作符(也可稱作 Paamayim Nekudotayim)或者更簡單地說是一對冒號,可以用于訪問靜態成員,類常量,還可以用于覆蓋類中的屬性和方法。
define和const的區別:可以用define()函數來定義常量。在php5.3.0以后,可以使用const關鍵字在類定義的外部定義常量,先前版本const關鍵字只能在類(class)中使用。一個常量一旦被定義,就不能再改變或取消定義。
如果常量名是動態的,也可以用函數constant()來獲取常量的值。用get_defined_contstants()可以獲得所有已定義的常量列表。
問:在php中定義常量時,const和define的區別?
答:使用const使得代碼簡單易讀,const本身就是一個語言結構,而define是一個函數。另外const在編譯時要比define快很多。
1、const用于類成員變量的定義,一經定義,不可修改。Define不可以用于類成員變量的定義,可用于全局常量。
2、Const可在類中使用,define不能
3、Const不能再條件語句中定義常量
4、const采用普通的常量名稱,define可以采用表達式作為名稱
5、const只能接受靜態的標量,而define可以采用任何表達式
6、const定義的常量時大小寫敏感,而define可以通過第三個參數(為true表示大小寫不敏感)來指定大小寫是否敏感。
const與static的區別
6、const定義的常量時大小寫敏感,而define可以通過第三個參數(為true表示大小寫不敏感)來指定大小寫是否敏感。
class Test{
const PATH = 'c/';//修飾常量
public function ass(){
echo $this::PATH.'<br />';
echo self::PATH.'<br />';
}
}
在類的內部,static修飾的方法體內部,無法訪問當前類的任何普通成員變量,準確的來說是無法使用關鍵字$this,只可以使用當前類的靜態成員變量,和類常量。
使用static的過程中,調用的方法與調用static修飾的變量不同,既可以通過類名調用,也可以通過對象名調用
**#### 2 命名空間**
1 命名空間介紹:
廣義上來說,命名空間是一種封裝事物的方法。
當和命名空間結合起來時 declare 的唯一合法語法是 declare(encoding='...');
2 命名空間和動態語言特征
PHP 命名空間的實現受到其語言自身的動態特征的影響。
3 namespace關鍵字和__namespace__常量
PHP支持兩種抽象的訪問當前命名空間內部元素的方法,__NAMESPACE__ 魔術常量和namespace關鍵字。
常量__NAMESPACE__的值是包含當前命名空間名稱的字符串。在全局的,不包括在任何命名空間中的代碼,它包含一個空的字符串。關鍵字 namespace 可用來顯式訪問當前命名空間或子命名空間中的元素。它等價于類中的 self 操作符。
4 名稱解析規則
命名空間名稱定義
非限定名稱Unqualified name:
名稱中不包含命名空間分隔符的標識符,例如 Foo
限定名稱Qualified name:
名稱中含有命名空間分隔符的標識符,例如 Foo\Bar
完全限定名稱Fully qualified name:
名稱中包含命名空間分隔符,并以命名空間分隔符開始的標識符,例如 \Foo\Bar。 namespace\Foo 也是一個完全限定名稱。