本篇內(nèi)容主要講解“靜態(tài)成員在PHP中是如何繼承的”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“靜態(tài)成員在PHP中是如何繼承的”吧!
茶陵網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,茶陵網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為茶陵近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個(gè)售后服務(wù)好的茶陵做網(wǎng)站的公司定做!
靜態(tài)成員,也就是用static修飾的變量或者方法,如果搞不清楚它們實(shí)現(xiàn)的原理,就很容易會出現(xiàn)一些錯(cuò)誤。這次我們來研究的是在繼承中靜態(tài)成員的調(diào)用情況。首先來看這樣一段代碼:
class A
{
static $a = 'This is A!';
public function show()
{
echo self::$a, PHP_EOL;
echo static::$a, PHP_EOL;
}
}
class B extends A
{
static $a = 'This is B!';
}
$b = new B;
$b->show();
之前的文章中,我們有說過self的問題。self僅僅只是指向當(dāng)前這個(gè)類。注意,是類,不是實(shí)例化后的對象。所以上面的輸出結(jié)果是:
This is A!
This is B!
好了,有了這個(gè)基礎(chǔ)之后,我們知道靜態(tài)成員是和類有關(guān)的,和對象無關(guān)。那么以下的代碼也就更容易理解了。
class C
{
static $c = 1;
public $d = 1;
}
class D extends C
{
public function add()
{
self::$c++;
$this->d++;
}
}
$d1 = new D();
$d2 = new D();
$d1->add();
echo 'c:' . D::$c . ',d:' . $d1->d . ';', PHP_EOL;
$d2->add();
echo 'c:' . D::$c . ',d:' . $d2->d . ';', PHP_EOL;
直接讀代碼能推導(dǎo)出輸出的結(jié)果嗎?其實(shí)只要掌握了上文中所說的原則,這段代碼就很容易理解了。$c是靜態(tài)變量,$d是普通變量。通過類實(shí)例的add()方法進(jìn)行操作后,$c因?yàn)槭呛皖愑嘘P(guān),所以不管是哪個(gè)實(shí)例對象,操作它之后都會是共享的。而$d作為普通變量,它的作用域僅限制在當(dāng)前這個(gè)實(shí)例對象中。因此,輸出的結(jié)果是:
c:2,d:2;
c:3,d:2;
最后,我們還是來復(fù)習(xí)一次self、parent和static關(guān)鍵字。
class E {
public static function test(){
echo "This is E test!";
}
}
class F extends E{
public static function t(){
self::test();
parent::test();
static::test();
}
public static function test(){
echo "This is F test!";
}
}
F::t();
t()輸出的三個(gè)結(jié)果是什么呢?詳情可以查看之前的文章PHP中的Static
測試代碼:https://github.com/zhangyue0503/dev-blog/blob/master/php/201912/source/%E9%9D%99%E6%80%81%E6%88%90%E5%91%98%E5%9C%A8PHP%E4%B8%AD%E6%98%AF%E6%80%8E%E4%B9%88%E7%BB%A7%E6%89%BF%E7%9A%84%EF%BC%9F.php
參考文檔:https://www.php.net/manual/zh/language.oop5.static.php
到此,相信大家對“靜態(tài)成員在PHP中是如何繼承的”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!