PHP學習4——物件導向
主要內容:
- 建立類
- 成員方法
- 構造方法
- 析構方法
- 封裝
- 繼承
- 介面
- 多型
- 靜態成員
- 常用關鍵字
- 常用魔術方法
從PHP5開始引入了物件導向的全部機制,物件導向的特性符合軟體工程的3個目標:重用性,靈活性,擴充套件性。
建立類
類前面不用public修飾,只要class,類的屬性不能在初始化賦值(除非你寫了構造方法來初始化賦值),屬性的使用符號->,比如$aClass->name;
demo.php
<?php //宣告ren類,預設public,不寫 class ren{ public $name; public $sex; public $age; } //例項化ren類 $xiaoli=new ren(); //設定name屬性 $xiaoli->name="小李"; //獲取name屬性 echo $xiaoli->name; ?>
輸出
=》小李
成員方法
就是類中函式,只是在原先的函式宣告前面加修飾符public,即可,呼叫方法$aClass->func(),在函式中使用該物件的屬性使用關鍵字$this,比如$this->name;
class_func.php
<?php //宣告ren類,預設public,不寫 class ren{ public $name; public $sex; public $age; public function say(){ echo "我叫做".$this->name."<br/>"; } } //例項化ren類 $xiaoli=new ren(); //設定name屬性 $xiaoli->name="小李"; //呼叫方法 $xiaoli->say(); ?>
輸出
我叫做小李
構造方法
在類的方法中的一個特殊的方法,預設為public(不需要寫),,寫法:__construct(){},注意前面是2個下劃線。
可以使用構造方法進行物件的初始化賦值
每一次例項化物件(new),都會執行。
construct.php
<?php //宣告ren類,預設public,不寫 class ren{ public $name; public $sex; public $age; //成員方法 public function say(){ echo "我叫做".$this->name."<br/>"; echo "性別:".$this->sex."<br/>"; echo "年齡:".$this->age."<br/>"; } //構造方法 function __construct($name,$sex,$age){ $this->name=$name; $this->sex=$sex; $this->age=$age; } } //例項化ren類,初始化物件賦值 $xiaoli=new ren("小李","男",25); //呼叫方法 $xiaoli->say(); ?>
輸出
我叫做小李 性別:男 年齡:25
析構方法
和構造方法名稱類似,但是不能帶任何引數,寫法:function __destruct(){}
在銷燬一個類之前執行一些操作或完成功能,在物件被銷燬時自動執行。
destruct.php
<?php //宣告ren類,預設public,不寫 class ren{ public $name; public $sex; public $age; //成員方法 public function say(){ echo "我叫做".$this->name."<br/>"; echo "性別:".$this->sex."<br/>"; echo "年齡:".$this->age."<br/>"; } //構造方法 function __construct($name,$sex,$age){ $this->name=$name; $this->sex=$sex; $this->age=$age; } //析構方法 function __destruct(){ echo "<br/>$this->name 這個物件被銷燬了。<br/>"; } } //例項化ren類,初始化物件賦值 $xiaoli=new ren("小李","男",25); //呼叫方法 $xiaoli->say(); //物件自動銷燬,執行__destruct ?>
輸出
我叫做小李 性別:男 年齡:25 小李 這個物件被銷燬了。
也可以使用unset方法手動銷燬物件,比如$unset($xiaoli)
unset.php
<?php //宣告ren類,預設public,不寫 class ren{ public $name; public $sex; public $age; //成員方法 public function say(){ echo "我叫做".$this->name."<br/>"; echo "性別:".$this->sex."<br/>"; echo "年齡:".$this->age."<br/>"; } //構造方法 function __construct($name,$sex,$age){ $this->name=$name; $this->sex=$sex; $this->age=$age; } //析構方法 function __destruct(){ echo "<br/>$this->name 這個物件被銷燬了。<br/>"; } } //例項化ren類,初始化物件賦值 $xiaoli=new ren("小李","男",25); $xiaobai=new ren("小白","女",23); //呼叫方法 unset($xiaoli,$xiaobai); //物件自動銷燬,執行__destruct ?>
輸出
小李 這個物件被銷燬了。 小白 這個物件被銷燬了。
封裝
物件導向的3特性:封裝,繼承,多型
封裝是物件導向的3特性之一(3特性為:封裝,繼承,多型)
類封裝了程式碼,物件則封裝了資料
訪問關鍵字:public,private,protected
繼承
這也是物件導向的3特性之一
繼承使用的關鍵字為extends
繼承可以擴充原先的類的屬性和方法,還可以直接使用原先的類的屬性和方法,節省了一大推敲程式碼的時間!
不過繼承的是public,protected的屬性和方法,至於private乃是師傅的私家珍藏(俗稱“留一手”),是不會讓繼承的!
PHP的物件導向的設計,和Java語言的設計非常的類似,難道是copy“借鑑”了Java的嗎?也許吧!
jicheng.php
<?php //宣告tool類 class tool{ function on(){ echo "<br/>啟動<br/>"; } function run(){ echo "執行<br/>"; } function off(){ echo "關閉<br/>"; } } //繼承tool類 class fan extends tool{ function app(){ $this->on(); $this->run(); $this->off(); } } $fan=new fan(); $fan->app(); ?>
輸出
啟動 執行 關閉
介面
PHP5也是單繼承的,只能extends一個類,但是可以實現(相當於繼承)多個介面(介面相當於是所有方法都是抽象方法,抽象類)
介面的關鍵字interface,實現介面implements
interface.php
<?php //宣告介面 interface tool{ //全都是預設的public abstract 的方法 function on(); function run(); function off(); } //實現介面 class fan implements tool{ function on(){ echo "<br/>風扇啟動<br/>"; } function run(){ echo "風扇執行<br/>"; } function off(){ echo "風扇關閉<br/>"; } } ?>
多型
由於PHP是弱型別語言,並不支援完全的多型。
多型就是根據不同的物件來做出不同的反應,執行同一個方法,但是得到的卻是不同的結果。
duotai.php
<?php //宣告介面 interface tool{ //全都是預設的public abstract 的方法 function on(); function run(); function off(); } //實現介面 class fan implements tool{ function on(){ echo "<br/>風扇啟動<br/>"; } function run(){ echo "風扇執行<br/>"; } function off(){ echo "風扇關閉<br/>"; } } //實現介面 class engine implements tool{ function on(){ echo "<br/>發動機啟動<br/>"; } function run(){ echo "發動機執行<br/>"; } function off(){ echo "發動機關閉<br/>"; } } //狀態類 class toolStatus{ function ts($tool){ $tool->on(); $tool->run(); $tool->off(); } } //應用多型 $fan=new fan(); $engine=new engine(); $toolStatus=new toolStatus(); $toolStatus->ts($fan); $toolStatus->ts($engine); ?>
輸出
風扇啟動 風扇執行 風扇關閉 發動機啟動 發動機執行 發動機關閉
靜態成員
類中一種特殊成員,不會被例項化到物件中,所以不用例項化物件即可呼叫。
關鍵字static,比如public static $name,public static function say(){};
在類的內部使用靜態的成員使用關鍵字self::$name,self表示類,2個冒號是作用域限定符,$name就是靜態成員。
在程式中使用靜態成員,寫法:
static.php
<?php //宣告tool類 class tool{ //宣告靜態方法 static function on(){ echo "<br/>啟動<br/>"; } function run(){ //內部呼叫靜態方法 self::on(); echo "執行<br/>"; } function off(){ echo "關閉<br/>"; } } //外部呼叫靜態方法,不用例項化物件 tool::on(); $fan=new tool(); $fan->run(); ?>
輸出
啟動 啟動 執行
常用關鍵字
final,被final(最終的)修飾的類不能被繼承,修飾的屬性不能被修改,比如public final function say(){}
clone,建立一個物件的副本,比如$newClass=clone $aClass;他會自動呼叫類的__clone(){}方法
常用的魔術方法
function __construct($name,$age){}構造方法
function __destruct(){}析構方法
function __clone(){}拷貝方法
function __set($name,$value)設定方法
function __get($name)獲取方法
function __call($func,$values)
function static __callStatic($func,$values)
相關文章
- 學習Rust 物件導向Rust物件
- PHP物件導向PHP物件
- PHP 物件導向 (九)物件導向三大特徵PHP物件特徵
- Lua學習(二)物件導向物件
- JavaScript學習2:物件導向JavaScript物件
- PHP物件導向(三)PHP物件
- java物件導向(4)Java物件
- Scala學習 2 Scala物件導向物件
- php中的程式導向與物件導向PHP物件
- PHP物件導向之&引用PHP物件
- PHP物件導向基礎PHP物件
- php物件導向--繼承PHP物件繼承
- java學習——物件導向之繼承Java物件繼承
- Lua學習筆記--物件導向(三)筆記物件
- PHP 物件導向 (十一)反射類PHP物件反射
- PHP 物件導向 (十)TraitsPHP物件AI
- PHP 物件導向基礎概念PHP物件
- PHP 核心技術 --物件導向PHP物件
- php物件導向知識點PHP物件
- PHP物件導向07_PDOPHP物件
- Flutter學習筆記(8)--Dart物件導向Flutter筆記Dart物件
- js高階 物件導向 學習筆記JS物件筆記
- Java SE 學習---物件導向程式設計Java物件程式設計
- Javascript 物件導向學習1 Function function ObjectJavaScript物件FunctionObject
- Ext學習筆記2-物件導向筆記物件
- java物件導向作業4Java物件
- 物件導向-物件導向思想物件
- PHP物件導向深入研究之【物件生成】PHP物件
- 【python 物件導向】 python物件學習筆記《1》Python物件筆記
- PHP 物件導向 (二)類屬性PHP物件
- PHP 物件導向 (五)靜態方法PHP物件
- PHP 物件導向 (六)魔術方法PHP物件
- PHP MySQL (三)物件導向 事務PHPMySql物件
- PHP物件導向(OOP)—-分頁類PHP物件OOP
- PHP基礎之物件導向篇PHP物件
- php基礎語法_物件導向PHP物件
- 大資料學習之路——java物件導向(二)大資料Java物件
- 3. Struct 與 物件導向 |《 刻意學習 Golang 》Struct物件Golang