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寫在類之前,那么講禁止整個類被繼承,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/33639.html
標籤:PHP
下一篇:php面向物件高級應用二
