類定義:class關鍵字
訪問控制修飾符:(public|protected|private)
類的實例化:關鍵字new
訪問屬性:對象變量->屬性名(屬性名不能有$符號)
調用方法:對象變量->方法名()(這里的小括號不能省略)
$this關鍵字
PHP會自動的調用:__construct();
析構方法:__destruct();
刪除一個對象:unset(對象變量);
對象的克隆:新對象 = clone 已有的對象;__clone方法
instanceof運算符:
對象變量 instanceof 類名;
作用:判斷一個對象是否為某一個類的一個實例,返回布爾值。
靜態變量:使用關鍵字static
靜態變量訪問的語法形式為:類名::靜態屬性名
在某個類的內部,訪問靜態成員:使用關鍵字self來代替當前的類名
無論采用什么方式調用靜態方法,里面都不可以使用$this關鍵字,因為$this本身就體現了各個對象“獨自”占用方法的含義! 要想使用$this關鍵字,只能調用非靜態方法!
類常量(類常量需要找到類才能訪問)
語法定義:const 常量名=值;
訪問語法形式:類名::常量名
類文件的自動加載機制
類文件的自動加載:__autoload();
注冊自動加載方法
注冊成自動加載函數:spl_autoload_register(‘函數名’);
注冊非靜態自動加載方法:array(對象變量,非靜態方法名);
注冊靜態自動加載方法:array(類名,靜態方法名);
注冊靜態自動加載方法:spl_autoload_register(‘類名::靜態方法名’);
數據的序列化與反序列化
向文件寫入數據:file_put_contents
從文件讀取數據:file_get_contents(文件地址)
序列化:serialize(),將原始數據轉換為可以用於保存和傳輸的字符串數據
反序列化:unserialize(),將序列化之后的字符串數據,轉換為原始數據
對象的序列化與反序列化
檢查文件或目錄是否存在:file_exists
__PHP_incomplete_class
__sleep():
觸發時機:在序列化一個對象的時候,由系統自動觸發執行!
作用:該方法用於規定哪些屬性需要被序列化,實現的方式為:返回一個索引數組,數組內的元素為需要被序列化的屬性名的集合!
__wakeup():
觸發時機:在一個對象反序列化的時候,由系統自動觸發執行!
作用:在反序列化一個對象的時候,完成該對象的初始化工作!
類的繼承
繼承的關鍵字:extends
重寫override
調用的方法為:父類名::父類同名方法
parent關鍵字
訪問控制修飾符
public:公共的,當前類內,繼承鏈類內和類外都可以被訪問到,訪問范圍是最大的!
protected:受保護的,當前類內和繼承鏈類內可以被訪問到,類外不能訪問!
private:私有的,只有當前類內可以被訪問到,其他類內和類外都不能訪問!\
提高MySQLDB的封裝性
第一步:將相關的屬性改成private
第二步:私有化相關方法
sql查詢語句的結果的三種形式
多行多列:fetchAll
一行多列:fetchRow
單行單列:fetchColumn
最終類final
最終類:final類,不能被繼承,只能實例化對象的類!
抽象類:abstract類,不能實例化,只能被繼承的類!
最終方法:
final method,在一個方法名的前面加上final關鍵字,就變成了一個最終方法!從語法上規定不能被子類重寫的方法。
interface接口:關鍵字就是interface!接口不是類,只是類的一種規范
接口:接口常量(關鍵字const),抽象方法(不需要使用abstract關鍵字);
接口的定義:interface I_自定義名字{ };
implements關鍵字:使該接口作用到類上面
PHP中的重載
指的是對不可訪問的成員的處理方式,稱之為成員的重載(包括屬性重載和方法重載)
為不可訪問的屬性賦值的時候 __set()
觸發時機:為一個不可訪問的屬性賦值的時候!
作用:系統默認的是行為是允許將一個不存在的屬性重新載入到一個類的內部,但是,一旦定義了__set()這個魔術方法,處理權就交給用戶自己了!
獲得不可訪問的屬性的值的時候 __get()
觸發時機:當獲取一個不可訪問的屬性的值的時候!
作用:系統默認的是行為是報告一個Notice級別的錯誤,但是,一旦定義了__get()這個魔術方法,處理權就交給用戶自己了!
刪除不可訪問的屬性的時候 __unset()
觸發時機:刪除一個不可訪問的屬性的時候
作用:系統默認的行為是報錯,如果加入了__unset方法,此時決定權就在用戶自己了!
判斷不可訪問的屬性是否存在的時候 __isset()
觸發時機:當判斷一個不可訪問的成員是否存在的時候
作用:系統默認的行為是返回false,但是一旦加入了__isset魔術方法,決定權又交給用戶了!
方法重載
__call():
觸發時機:當調用一個不可訪問的非靜態方法(對象方法)的時候,會自動執行該魔術方法!
__callstatic():
觸發時機:當訪問一個不可訪問的靜態方法的時候,會自動執行該方法!注意:需要在該方法的前面加上static關鍵字!
魔術方法和相關的魔術常量
__invoke()
觸發時機:當把對象當做一個函數或方法來調用的時候,會自動執行該魔術方法!目前用的不是太多!
__toString()
觸發時機:將一個對象當做一個字符串來使用的時候,會自動觸發該方法!
單例模式(“三私一公”)
1、 增加用於保存對象的私有靜態屬性
2、 把構造方法私有化
3、 增加一個可以獲得單例的公共方法
4、 將__clone私有化
工廠模式
MySQLDB的屬性重載
1、__unset什么都不做!
2、__isset只給用戶查詢一些設置的連接屬性
3、__get中只給用戶看一些用戶連接的信息
4、__set中也只給用戶設置一些基本連接信息
自定義遍歷
初始化指針、判斷指針是否合法、獲取值、獲取鍵、移動指針
類和對象的相關函數
class_exists()
判斷一個類是否存在
需要一個參數就是類名!
interface_exists()
判斷一個接口是否存在,也需要一個參數是,接口的名字!
method_exists()
判斷一個方法是否存在!
get_class()
獲得該對象所屬的類!
get_parent_class()
獲得該對象所屬的父類!如果該對象沒有父類,就返回false!
get_class_methods()
需要一個參數,就是某個類名!
返回一個索引數組,里面的元素就是該類的方法的名字!
get_class_vars()
需要一個參數,就是某個類名!
返回一個索引數組,里面的元素就是該類的屬性的名字!
公開的靜態方法和非靜態方法都可以獲取到,但是受訪問控制的限制!
is_object
判斷某個變量是否為一個對象!
命名空間初步
關鍵字namespace
空間的定義
namespace 空間名字;(進入到某個空間的語法和定義一個空間的語法是一樣的)
空間成員的概念
命名空間本身只“管轄三種成員:常量、函數和類!
PHP提供了三種訪問空間成員的方式:
1、非限定名稱訪問
2、限定名稱訪問
3、完全限定名稱訪問
空間引入和空間類的引入
空間類的引入
第一種:就是使用完全限定名稱訪問就行了!
第二種:把First空間里面的Student類引入到當前空間(Second空間)
把其他命名空間的類引入到當前空間的語法形式為:
use 空間名\類名