您好,登錄后才能下訂單哦!
封裝,繼承,多態(tài)是面向?qū)ο蟮娜筇匦?,本文總結(jié)一下 php 是如何實現(xiàn)這三大特性的
class className{ public $attribute1 //成員屬性 //成員方法 function fun1(){ echo "method1" } }
abstract class className1{ //抽象方法 abstract public function fun1(); abstract private function fun2(); abstract protected function fun3(); }
抽象類至少有一個抽象方法
抽象類不能被實例化,只能被繼承 extends
繼承的派生類要把所有方法重載才能實例化對象
可以看做是一種成員屬性全部為抽象的抽象類,用作定義規(guī)范(面向接口編程)
interface IName { const NAME; function fun1(); }
接口中方法 必須全為 抽象方法
接口中成員方法和屬性為 public
接口成員屬性必須為常量
接口不能被實例化,只能被引用 implement
被引用后,派生類不許把所有方法重載才能實例化對象
實例化對象,使用 -> 訪問對象內(nèi)容 (成員屬性和成員方法)
$instance1 = new className; //實例化對象 $instance1->attribute1; //訪問成員屬性 $instance1->method1(); //訪問成員方法
作用域 | public | protected | private |
---|---|---|---|
全局 | Yes | No | No |
繼承類 | Yes | Yes | No |
本類 | Yes | Yes | Yes |
類的成員方法前如不加封裝關(guān)鍵字,默認(rèn)為public,不過最好加上關(guān)鍵字,便于閱讀
訪問當(dāng)前 對象 中的成員屬性和成員方法
在不實例化的情況下訪問當(dāng)前 類 的成員屬性和成員方法, 作用域在定義類時確定。該關(guān)鍵字常與 static, const 搭配使用,用于訪問靜態(tài)成員和常量
在不實例化的情況下訪問當(dāng)前 類 的成員屬性或成員方法。常用于在派生類中訪問基類成員
php 只能單一繼承
class B extends A{ ...... }
用于引用接口,不同于繼承的單一性,一個類可以引用多個接口
class A implements demo1, demo2, demo3{ ...... }
先繼承后引用,單繼承多引用
class A extends B implements demo1, demo2, demo3{ ...... }
final class className1{ final func1(){ ...... } }
加了 final 關(guān)鍵字的類不能被繼承
基類中加了 final 關(guān)鍵字的成員方法不能在派生類中被重載
加了 static 關(guān)鍵字的成員方法和成員屬性不具備多態(tài)性,用于在不實例化的情況下訪問。靜態(tài)屬性單獨占用內(nèi)存,不會在對象實例化時被反復(fù)創(chuàng)建。
class className1{ static $atrr1; static func1(){ ...... } }
用于在類中定義常量,類似用于在外部定義常量的PHP關(guān)鍵字 define(); const 只能修飾類中的成員屬性
class className1{ const NAME; }
常量一般用大寫字母命名,且常量不使用 $ 符號
用于判斷對象實例類型
$obj = new A(); if ($obj instanceof A) { echo 'A'; }
摘自php手冊
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。