PHP類(lèi)和對象(2)

  • 2020-07-30 14:27:06
  • 閱讀次數:次
  • 作者:盈嵐科技小編
  • 來(lái)源:http://amzcoolest.com

構造函數和析構函數

PHP 5允許開(kāi)發(fā)者在一個(gè)類(lèi)中定義一個(gè)方法作為構造函數,具有構造函數的類(lèi)會(huì )在每次創(chuàng )建對象時(shí)先調用該方法,一般在構造函數中做一些初始化工作。其語(yǔ)法格式如下:

void --construct ([ mixed $args [, $... ]] )

如果子類(lèi)中定義了構造函數,則不會(huì )自動(dòng)調用父類(lèi)構造函數。要執行父類(lèi)構造函數,需要在子類(lèi)的構造函數中調用parent::__construct()。

<?phpclass BaseClass {   function __construct() {       print "對象初始化構造函數";   }}class SubClass extends BaseClass {   function __construct() {       parent:__construct();       print "初始化子類(lèi)";   }}$obj = new BaseClass();      //自動(dòng)顯示:對象初始化構造函數$obj = new SubClass();       //自動(dòng)執行父類(lèi)和子類(lèi)的構造函數?>

為了實(shí)現向后兼容性,如果PHP 5在類(lèi)中找不到__construct()函數,它就會(huì )嘗試尋找舊式的構造函數,也就是和類(lèi)同名的函數。

析構函數就是在對象的所有引用都被刪除或者當對象被顯式銷(xiāo)毀時(shí)執行。其語(yǔ)法格式如下:

void --destruct ( void )

例如,在下面示例中將會(huì )自動(dòng)執行構造函數和析構函數。

<?phpclass MyClass {   function __construct() {       print "構造函數";   }   function __destruct() {       print "析構函數";   }}$obj = new MyClass();?>

與構造函數一樣,父類(lèi)的析構函數不會(huì )被引擎自動(dòng)調用。要執行父類(lèi)的析構函數,必須在子類(lèi)的析構函數體中顯式調用parent::__destruct()。

對象繼承

繼承是面向對象編程的基本特性,PHP的對象模型也支持繼承。繼承將會(huì )影響到類(lèi)與類(lèi)、對象與對象之間的關(guān)系。當擴展一個(gè)類(lèi),子類(lèi)就會(huì )繼承父類(lèi)的所有公有和保護方法。

但是子類(lèi)的方法會(huì )覆蓋父類(lèi)的方法。

例如,在下面示例中,子類(lèi)bar繼承父類(lèi)foo的printPHP()方法,同時(shí)重寫(xiě)了父類(lèi)的printItem()方法。

<?phpclass foo{    public function printItem($string) {        echo 'Foo: ' . $string; }     public function printPHP(){        echo 'PHP is great.';    }}class bar extends foo{    public function printItem($string) {        echo 'Bar: ' . $string;    }}$foo = new foo();$bar = new bar();$foo->printItem('baz');    //顯示:Foo: baz$foo->printPHP();          //顯示:PHP is great$bar->printItem('baz');    //顯示:Bar: baz$bar->printPHP();         //顯示:PHP is great?>

繼承對于功能的設計和抽象是非常有用的,而且對于類(lèi)似的對象增加新功能就無(wú)須重新再寫(xiě)這些公用的功能。

抽象類(lèi)

抽象類(lèi)不能直接被實(shí)例化,必須先繼承該抽象類(lèi),然后再實(shí)例化子類(lèi)。抽象類(lèi)中至少包含一個(gè)抽象方法。如果類(lèi)方法被聲明為抽象的,那么其中就不能包括具體的功能實(shí)現。繼承一個(gè)抽象類(lèi)時(shí),子類(lèi)必須實(shí)現抽象類(lèi)中的所有抽象方法。如果抽象類(lèi)中某個(gè)抽象方法被聲明為protected,那么子類(lèi)中實(shí)現的方法就應該聲明為protected或者public,而不能定義為private。如:

<?phpabstract class AbstractClass{    abstract protected function getValue();  //強制子類(lèi)必須定義的方法    public function printOut() {             //普通方法(非抽象方法)print $this->getValue() . "\n";    }}class Class1 extends AbstractClass{    protected function getValue() {         //具體化抽象方法        return "子類(lèi)1";    }}$class1 = new Class1;$class1->printOut();                       //顯示:子類(lèi)1?>

注意:抽象類(lèi)的子類(lèi)中的普通方法執行方式和其他類(lèi)相同。

當前文章標題:PHP類(lèi)和對象(2)

當前URL:http://amzcoolest.com/news/wzzz/3250.html

上一篇:PHP類(lèi)和對象(1)

下一篇:PHP編碼規范

網(wǎng)站建設、抖音推廣、頭條推廣、微信朋友圈推廣、快手推廣專(zhuān)線(xiàn):181-8386-5875(微信同號)
亚洲精品无码mv在线|新国产精品视频福利免费|日韩高清在线观看不卡一区二区|一本久久a久久精品免费不|亚洲私人无码内射免费观看