如何在PHP中使用類(lèi)與對(duì)象?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到思茅網(wǎng)站設(shè)計(jì)與思茅網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類(lèi)型包括:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋思茅地區(qū)。php的框架:1、Laravel,Laravel是一款免費(fèi)并且開(kāi)源的PHP應(yīng)用框架。2、Phalcon,Phalcon是運(yùn)行速度最快的一個(gè)PHP框架。3、Symfony,Symfony是一款為Web項(xiàng)目準(zhǔn)備的PHP框架。4、Yii,Yii是一款快速、安全和專(zhuān)業(yè)的PHP框架。5、CodeIgniter,CodeIgniter是一款非常敏捷的開(kāi)源PHP框架。6、CakePHP,CakePHP是一款老牌的PHP框架。7.Kohana,Kohana是一款敏捷但是功能強(qiáng)大的PHP框架。
類(lèi)是面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念,是一類(lèi)東西的結(jié)構(gòu)描述 , 是一種抽象的概念 . 對(duì)象是一類(lèi)東西的一個(gè)具體的實(shí)例 , 是具體事物 .
對(duì)象通過(guò)new關(guān)鍵字進(jìn)行實(shí)例化:
比如汽車(chē)可以抽象為一個(gè)類(lèi),汽車(chē)擁有名字、輪胎、速度、重量等屬性,可以有換擋、前進(jìn)、后退等操作方法。
// 定義一個(gè)汽車(chē)類(lèi) class Car { $name = '汽車(chē)'; function getName() { return $this->name; } } //對(duì)象通過(guò)new關(guān)鍵字進(jìn)行實(shí)例化 $car = new Car(); echo $car->getName();
在類(lèi)中定義的變量稱(chēng)之為屬性。屬性聲明是由關(guān)鍵字 public,protected 或者 private 開(kāi)頭,后面跟一個(gè)普通的變量聲明來(lái)組成。屬性的變量可以設(shè)置初始化的默認(rèn)值,默認(rèn)值必須是常量。
方法就是在類(lèi)中的function,很多時(shí)候我們分不清方法與函數(shù)有什么差別,在面向過(guò)程的程序設(shè)計(jì)中function叫做函數(shù),在面向?qū)ο笾衒unction則被稱(chēng)之為方法。
訪問(wèn)控制的關(guān)鍵字代表的意義為:
public:公開(kāi)的 , 任何地方都可以訪問(wèn)
protected:受保護(hù)的 , 類(lèi)內(nèi)自身 , 其子類(lèi)和父類(lèi)可以訪問(wèn)
private:私有的 , 類(lèi)內(nèi)自身可訪問(wèn)
類(lèi)屬性的訪問(wèn)控制必須定義 , 即必須寫(xiě)出關(guān)鍵字 , 定義為三個(gè)中的一個(gè)
類(lèi)方法不寫(xiě)關(guān)鍵字 , 則默認(rèn)為公有的
class Car { public $speed = 0; //增加speedUp方法,使speed加10 public function speedUp(){ $this->speed += 10; } } // 創(chuàng)建對(duì)象 $car = new Car(); // 通過(guò)對(duì)象獲取類(lèi)屬性與類(lèi)方法 $car->speedUp(); echo $car->speed;
PHP5可以在類(lèi)中使用__construct()定義一個(gè)構(gòu)造函數(shù),具有構(gòu)造函數(shù)的類(lèi),會(huì)在每次對(duì)象創(chuàng)建的時(shí)候調(diào)用該函數(shù),因此常用來(lái)在對(duì)象創(chuàng)建的時(shí)候進(jìn)行一些初始化工作。
在子類(lèi)中如果定義了__construct則不會(huì)調(diào)用父類(lèi)的__construct,如果需要同時(shí)調(diào)用父類(lèi)的構(gòu)造函數(shù),需要使用parent::__construct()顯式的調(diào)用。
同樣,PHP5支持析構(gòu)函數(shù),使用__destruct()進(jìn)行定義,析構(gòu)函數(shù)指的是當(dāng)某個(gè)對(duì)象的所有引用被刪除,或者對(duì)象被顯式的銷(xiāo)毀時(shí)會(huì)執(zhí)行的函數(shù)。
class Car { function __construct() { print "構(gòu)造函數(shù)被調(diào)用 \n"; } function __destruct() { print "析構(gòu)函數(shù)被調(diào)用 \n"; } } $car = new Car(); //實(shí)例化時(shí)會(huì)調(diào)用構(gòu)造函數(shù) echo '使用后,準(zhǔn)備銷(xiāo)毀car對(duì)象 \n'; unset($car); //銷(xiāo)毀時(shí)會(huì)調(diào)用析構(gòu)函數(shù)
當(dāng)PHP代碼執(zhí)行完畢以后,會(huì)自動(dòng)回收與銷(xiāo)毀對(duì)象,因此一般情況下不需要顯式的去銷(xiāo)毀對(duì)象。
靜態(tài)屬性:
public / protected / private static $變量名
不用實(shí)例化類(lèi) , 直接調(diào)用 類(lèi)名 :: $變量名
但實(shí)例化后 , 不允許使用 對(duì)象 -> $變量名
靜態(tài)方法
public / protected / private static function 方法名()
不用實(shí)例化類(lèi) , 直接調(diào)用 類(lèi)名 :: 方法名()
實(shí)例化后 , 對(duì)象 -> 方法名()
靜態(tài)方法中,$this偽變量不允許使用。可以使用self,parent,static在內(nèi)部調(diào)用靜態(tài)方法與屬性。
class Car { private static $speed = 10; public static function getSpeed() { return self::$speed; } public static function speedUp() { return self::$speed+=10; } } class BigCar extends Car { public static function start() { parent::speedUp(); } } BigCar::start(); echo BigCar::getSpeed();
如果構(gòu)造函數(shù)定義成了私有方法,則不允許直接實(shí)例化對(duì)象了,這時(shí)候一般通過(guò)靜態(tài)方法進(jìn)行實(shí)例化,在設(shè)計(jì)模式中會(huì)經(jīng)常使用這樣的方法來(lái)控制對(duì)象的創(chuàng)建,比如單例模式只允許有一個(gè)全局的對(duì)象。
class Car { private function __construct() { echo 'object create'; } private static $_object = null; public static function getInstance() { if (empty(self::$_object)) { self::$_object = new Car(); //內(nèi)部方法可以調(diào)用私有方法,因此這里可以創(chuàng)建對(duì)象 } return self::$_object; } } $car = new Car(); //這里不允許直接實(shí)例化對(duì)象 $car = Car::getInstance(); //通過(guò)靜態(tài)方法來(lái)獲得一個(gè)實(shí)例
繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)中常用的一個(gè)特性,汽車(chē)是一個(gè)比較大的類(lèi),我們也可以稱(chēng)之為基類(lèi),除此之外,汽車(chē)還分為卡車(chē)、轎車(chē)、東風(fēng)、寶馬等,因?yàn)檫@些子類(lèi)具有很多相同的屬性和方法,可以采用繼承汽車(chē)類(lèi)來(lái)共享這些屬性與方法,實(shí)現(xiàn)代碼的復(fù)用。
class Car { public $speed = 0; //汽車(chē)的起始速度是0 public function speedUp() { $this->speed += 10; return $this->speed; } } //建立一個(gè)Truck類(lèi),擴(kuò)展Car類(lèi),并覆蓋speedUp方法,使速度累加50 class Truck extends Car{ public function speedUp(){ parent::speedUp(); $this->speed += 50; return $this->speed; } } $car = new Truck(); $car->speedUp(); echo $car->speed;
PHP中的重載指的是動(dòng)態(tài)的創(chuàng)建屬性與方法,是通過(guò)魔術(shù)方法來(lái)實(shí)現(xiàn)的。
屬性的重載通過(guò)__set,__get,__isset,__unset來(lái)分別實(shí)現(xiàn)對(duì)不存在屬性的賦值、讀取、判斷屬性是否設(shè)置、銷(xiāo)毀屬性。
class Car { private $ary = array(); public function __set($key, $val) { $this->ary[$key] = $val; } public function __get($key) { if (isset($this->ary[$key])) { return $this->ary[$key]; } return null; } public function __isset($key) { if (isset($this->ary[$key])) { return true; } return false; } public function __unset($key) { unset($this->ary[$key]); } } $car = new Car(); $car->name = '汽車(chē)'; //name屬性動(dòng)態(tài)創(chuàng)建并賦值 echo $car->name; if ($car->age){ echo '有'; }else{ echo '無(wú)'; } unset($car->name); var_dump($car->name);
方法的重載通過(guò)__call來(lái)實(shí)現(xiàn),當(dāng)調(diào)用不存在的方法的時(shí)候,將會(huì)轉(zhuǎn)為參數(shù)調(diào)用__call方法,當(dāng)調(diào)用不存在的靜態(tài)方法時(shí)會(huì)使用__callStatic重載。
class Car { public $speed = 0; public function __call($name, $args) { if ($name == 'speedUp') { $this->speed += 10; } } } $car = new Car(); $car->speedUp(); //調(diào)用不存在的方法會(huì)使用重載 echo $car->speed;
對(duì)象比較,當(dāng)同一個(gè)類(lèi)的兩個(gè)實(shí)例的所有屬性都相等時(shí),可以使用比較運(yùn)算符 == 進(jìn)行判斷,當(dāng)需要判斷兩個(gè)變量是否為同一個(gè)對(duì)象的引用時(shí),可以使用全等運(yùn)算符 === 進(jìn)行判斷。
class Car { } $a = new Car(); $b = new Car(); if ($a == $b) echo '=='; //true if ($a === $b) echo '==='; //false
對(duì)象復(fù)制,在一些特殊情況下,可以通過(guò)關(guān)鍵字clone來(lái)復(fù)制一個(gè)對(duì)象,這時(shí)__clone方法會(huì)被調(diào)用,通過(guò)這個(gè)魔術(shù)方法來(lái)設(shè)置屬性的值。
class Car { public $name = 'car'; public function __clone() { $obj = new Car(); $obj->name = $this->name; } } $a = new Car(); $a->name = 'new car'; $b = clone $a; var_dump($b);
對(duì)象序列化,可以通過(guò)serialize方法將對(duì)象序列化為字符串,用于存儲(chǔ)或者傳遞數(shù)據(jù),然后在需要的時(shí)候通過(guò)unserialize將字符串反序列化成對(duì)象進(jìn)行使用。
class Car { public $name = 'car'; } $a = new Car(); $str = serialize($a); //對(duì)象序列化成字符串 echo $str.'<br>'; $b = unserialize($str); //反序列化為對(duì)象 var_dump($b);
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,的支持。
新聞名稱(chēng):如何在PHP中使用類(lèi)與對(duì)象-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://aaarwkj.com/article10/gjcdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、自適應(yīng)網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、定制開(kāi)發(fā)、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容