日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php受保护的成员方法,PHP继承和受保护的成员可见性

發(fā)布時間:2024/9/19 php 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php受保护的成员方法,PHP继承和受保护的成员可见性 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我發(fā)現(xiàn)在

PHP中似乎是一個奇怪的繼承問題.

Members declared protected can be accessed only within the class

itself and by inherited and parent classes.

對我而言意味著:

A可以訪問B的受保護成員,如果A或B的實例A

但是,如果A和B都擴展了Foo,而Foo有一個受保護的構造函數(shù),在B中沒有被覆蓋,那么我可以在A內創(chuàng)建一個B的實例.這對我來說沒有意義,因為A不是B和B不是A的實例.我也可以調用A中的保護方法$b-> test(),它執(zhí)行在B中實現(xiàn)的方法(如果B不重新測試test(),那么執(zhí)行Foo被執(zhí)行.)對我來說這更奇怪,因為如果B直接實現(xiàn)受保護的構造函數(shù),我不能從A內創(chuàng)建一個B的實例.看起來很奇怪,我無法訪問受保護的構造函數(shù)(也在父類中聲明),但訪問受保護的方法(也在父類中聲明)是沒有問題的.

注意,當我使用不擴展Foo的類C時,我會得到預期的行為.如果我嘗試從C中實例化B,我會遇到一個致命的錯誤,因為我正在嘗試訪問受保護的構造函數(shù).如果我向B添加一個公共構造函數(shù),可以實例化(這是預期的),我仍然無法訪問受保護的方法test()(這也是預期的行為).使用A而不是C時,我期待同樣的行為.

示例代碼再次解釋:

class Foo {

protected function __construct() {

echo('Constructing ' . get_called_class());

}

protected function test() {

echo('Hello world ' . __METHOD__);

}

}

class A extends Foo {

public function __construct() {

parent::__construct();

}

public function testB() {

// Both of these lines work

$b = new B();

$b->test();

}

}

class B extends Foo {

protected function test() {

echo('Hello world Again ' . __METHOD__);

}

}

class C {

public function __construct() {

}

public function testB() {

// Both of these lines cause fatal errors

$b = new B();

$b->test();

}

}

$a = new A();

$a->testB();

$c = new C();

$c->testB();

我可能沒看到什么,但我找不到什么.有人可以向我解釋這個行為嗎?

總結

以上是生活随笔為你收集整理的php受保护的成员方法,PHP继承和受保护的成员可见性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。