PHP 物件導向實現代碼

來源:互聯網
上載者:User

1,簡單的對象建立 複製代碼 代碼如下://類的範圍final:將阻止子類重寫這個欄位
//方法的範圍abstract: 在父類中聲明,在子類中實現
//定義類:
class Employee{
//定義欄位
private $name;
protected $title;
public $wage;
//常量
const PI = 3.1415926;
//靜態成員變數
private static $visitors = 0;
//定義建構函式
function __construct(){
//使用靜態成員變數
self::$visitors++;
echo "constructor";
}
//定義解構函式
function __destruct(){
echo "destruct";
}
//聲明方法
public function clockIn(){
//使用欄位
echo "Member $this->name";
}
//在訪問一個對象並不擁有的屬性時(比如私人欄位),如果該對象使用者__get和__set方法,則會自動調用__get方法或__set方法
function __set($property,$value){
$this->$property = $value;
}
function __get($property){
return $this->$property;
}
}
//類的繼承 Manager繼承Employee
class Manager extends Employee {
function __construct(){
//調用父類的建構函式或方法
parent::__construct();
parent::clockIn();
echo "Manager constructor";
}
}
//建立對象
$employee = new Employee();
$employee->wage = 10000;
//使用常量
echo Employee::PI;
//調用方法
$employee->clockIn();
$manager = new Employee();
//instanceof判斷一個對象是類的執行個體、類的子類,還是實現了某個特定介面
if($manager instanceof Employee ) echo "Yes";

2,進階OO特性
(1)對象複製 複製代碼 代碼如下://對象複製
class ClassA{
private $name;
private $title;
public function setName($name){
$this->name = $name;
}
function getName(){
return $this->name;
}
public function setTitle($title){
$this->title = $title;
}
public function getTitle(){
return $this->title;
}
function __clone(){
echo "我被複製了","<br>";
}
}
$classA = new ClassA();
$classA->setName("NameA");
$classA->setTitle("TitleA");
$classB = clone $classA;
$classB->setName("NameB");
echo $classA->getName(),"<br>",$classA->getTitle(),"<br>";
echo $classB->getName(),"<br>",$classB->getTitle(),"<br>";
/* output
我被複製了
NameA
TitleA
NameB
TitleA
*/

(2)介面 複製代碼 代碼如下://介面
interface IPillage{
function method();
}
class ClassC extends ClassA implements IPillage {
function method(){
echo "inteface method";
}
}
$classC = new ClassC();
$classC->method();
//inteface method

(3)抽象類別 複製代碼 代碼如下://抽象類別,是不能執行個體化的類,只能作為其它類繼承的基類
abstract class BaseClass{
protected $name;
abstract function method();
}
class ChileClass extends BaseClass {
function method(){
echo "method";
}
}
$child = new ChileClass();
$child->method();
//output method

註:
如果要建立一個模型,這個模型將由一些緊密相關的對象採用,就可以使用抽象類別。如果要建立由一些不相關對象採用的功能,就使用介面。
如果必須從多個來源繼承行為,就使用介面。php可以繼承多個介面,但不能擴充多個抽象類別。
如果知道所有類都會共用一個公用的行為實現,就使用抽象類別,並在其中實現該行為。在介面中無法實現行為。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.