php面向對象之instanceof關鍵字的用法
instanceof的作用有2個:(1)判斷一個對象是否是某個類的實例,(2)判斷一個對象是否實現了某個接口。
(1)判斷一個對象是否是某個類的實例
下面針對第一種用法我們來看個實例:
首先創建一個父類,再創建一個子類去繼承父類。實例化子類對象,然後去判斷對象是不是屬於子類,再判斷是不是屬於父類。
<?php class Itbook{ } class Phpbook extends Itbook{ private $bookname; } $book = new Phpbook(); if($book instanceof Phpbook){ echo '$book屬於Phpbook類<br>'; } if($book instanceof Itbook){ echo '$book屬於Itbook類'; }
(2)判斷一個對象是否實現了某個接口
<?php interface TestInterface{ public function interfaceMethod(); } class TestClass implements TestInterface{ public function interfaceMethod(){ return 'cyy is cute.'; } } $test = new TestClass(); if($test instanceof TestInterface){ echo '$test實現接口TestInterface'; }else{ echo '$test沒有實現接口TestInterface'; }
php面向對象之對象克隆方法
使用傳址引用的方式調用對象,實質調用的是同一個對象,有時需要建設立一個對象的副本,改變原來的對象時不希望影響到副本,在PHP中可以根據現在的對象來克隆出一個完全一樣的對象,克隆出來的副本和原本兩個對象完全獨立而互不干擾。
我們舉個簡單的例子來看一下克隆的用法:
<?php class Person{ public $name; function __construct($name){ $this->name = $name; } function me(){ echo '我是:'.$this->name; } } $person1 = new Person('cyy'); $person2 = clone $person1; $person1->me(); echo '<br>'; $person2->me();
結果如下:
我是:cyy 我是:cyy
還是上面的實例,只是稍微發生點變動。
<?php class Person{ public $name; function __construct($name){ $this->name = $name; } function me(){ echo '我是:'.$this->name; } } $person1 = new Person('cyy'); $person2 = clone $person1; $person1->me(); echo '<br>'; $person2->name='cyy2'; $person2->me();
上述實例的結果
我是:cyy 我是:cyy2
__clone的用法
很多時候我們不單單要去克隆一個對象,還想讓對象可以擁有自己的屬性和方法。那麼我們就要在類中創建一個__clone方法。這個方法類似於構造函數和析構函數,因爲不會直接調用它。
還是以上面的實例爲例:
<?php class Person{ public $name; function __construct($name){ $this->name = $name; } function __clone(){ $this->name = 'cyy01'; } function me(){ echo '我是:'.$this->name; } } $person1 = new Person('cyy'); $person2 = clone $person1; $person1->me(); echo '<br>'; $person2->me();
結果如下:
我是:cyy 我是:cyy01
php面向對象之對象比較用法詳解
運算符“==”和“===”
當使用比較運算符(==)比較兩個對象變量時,比較的原則是:如果兩個對象的屬性個屬性值都相等,而且兩個對象是同一個類的實例,那麼這兩個對象變量相等;
而如果使用全等運算符(===),這兩個對象變量一定要指向某各類的同一個實例(即同一個對象)。
下面我們看個實例:
<?php class Person{ public $name; function __construct($name){ $this->name = $name; } } $person1 = new Person('cyy'); $person2 = new Person('cyy'); if($person1 === $person2){ echo '$person1 === $person2<br>'; }else if($person1 == $person2){ echo '$person1 == $person2<br>'; }else{ echo '$person1 != $person2<br>'; } $person3 = $person1; if($person1 === $person3){ echo '$person1 === $person3<br>'; }else if($person1 == $person3){ echo '$person1 == $person3<br>'; }else{ echo '$person1 != $person3<br>'; }
結果如下:
$person1 == $person2 $person1 === $person3
實例解析:
使用全等運算符(===),這兩個對象變量一定要指向某各類的同一個實例(即同一個對象)。只有當運算符“===”兩邊比較的值是同一個對象的時候,才能成立。
php面向對象之什麼是抽象類?及抽象類的作用
什麼是抽象類?
抽象類不能被實例化,同樣方法也沒有實現,只是提供方法聲明,沒有具體實現。抽象類只能作爲其他類的父類使用。
抽象類和普通類也差不多,都有成員變量和成員方法。但還是有區別的。包含抽象方法的類必須本身是抽象的。抽象方法是沒有方法體的,他的功能只能在子類中完成。
抽象類實例講解:
<?php abstract class Member{ abstract function vipMember($name,$level); } class Member1 extends Member{ function vipMember($name,$level){ echo 'my name is '.$name.', my level is '.$level; } } class Member2 extends Member{ function vipMember($name,$level){ echo 'my name is '.$name.', my level is '.$level; } } $mem1 = new Member1(); $mem1->vipMember('cyy','1'); echo '<br>'; $mem1 = new Member1(); $mem1->vipMember('cyy2','2');
php面向對象之final關鍵字用法及實例
什麼是final關鍵字?
final中文翻譯爲“最終的”,“最後的”。在聲明一個類之前用final關鍵詞修飾,說明這個函數將不能在任何子類中被重載,繼承,也就是說,被final修飾的類將不能再有子類。
final用法實例詳解:
<?php class A{ public $num = 25; final function operation(){ echo 'num is '.$this->num; } } class B extends A{ public $num = 50; function operation(){ echo 'num is '.$this->num; } } $num = new B(); $num->operation();
上述示例中禁止了在B類中重載A類中的operation()方法。這樣做只會報錯。
如果final寫在類之前,那麼講禁止整個類被繼承。
php面向對象高級應用詳解(1)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.