php受保护的成员方法,PHP继承和受保护的成员可见性
我发现在
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有一个受保护的构造函数,在B中没有被覆盖,那么我可以在A内创建一个B的实例.这对我来说没有意义,因为A不是B和B不是A的实例.我也可以调用A中的保护方法$b-> test(),它执行在B中实现的方法(如果B不重新测试test(),那么执行Foo被执行.)对我来说这更奇怪,因为如果B直接实现受保护的构造函数,我不能从A内创建一个B的实例.看起来很奇怪,我无法访问受保护的构造函数(也在父类中声明),但访问受保护的方法(也在父类中声明)是没有问题的.
注意,当我使用不扩展Foo的类C时,我会得到预期的行为.如果我尝试从C中实例化B,我会遇到一个致命的错误,因为我正在尝试访问受保护的构造函数.如果我向B添加一个公共构造函数,可以实例化(这是预期的),我仍然无法访问受保护的方法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继承和受保护的成员可见性相关推荐
- 计算机保护分区,磁盘显示为GPT(保护分区)
问题描述:PE进入系统,在计算机管理里面磁盘显示为GPT(保护分区).此时硬盘是不能重新分区或者格式化的. 解决思路:低版本的WIndows(PE)是不支持GPT分区的,我们需要使用系统自带的Disk ...
- 自动实现MS Word保护,Aspose教你如何加密保护Java程序中的DOCX文件
MS Word允许你用各种机制来保护DOCX文档.你可以设置打开文档所需的密码.另一方面,您可以指定保护级别,如使文档只读,只允许注释或表格字段等. 在这篇文章中,将学习如何自动化MS Word保护功 ...
- 保护模式及其编程——实模式与保护模式的切换
机器上电,CPU进入实模式,从物理地址0xFFFFFFFF0处开始执行初始化代码,设置基本系统功能操作必要的数据结构信息,例如处理中断和异常的IDT表.接下来,如果继续在保护模式工作,需要加载操作系统 ...
- C++ 多继承之如何调用私有成员
C++ 多继承之如何调用私有成员 #include <iostream> using namespace std;class A {private:int a; public:void s ...
- C++之继承探究(二):protected成员
前文:C++之继承探究(一):继承的概念 protected成员 在下面右例中,子类虽然继承了父类的私有成员b_number,但是在子类的print()函数中依然不能直接访问该私有成员,子类只能通 ...
- php 电话中转 保护用户隐私,打车APP的隐私保护通话是如何保护用户号码隐私的...
原标题:打车APP的隐私保护通话是如何保护用户号码隐私的 隐私保护通话,拿百数的号码隐私保护业务举例来说,是防止用户手机/座机号码隐私泄露的解决方案,适用于网购.出行.求职.外卖等各种场景,可申请全国 ...
- 【电气专业知识问答】问:为什么现代大型发电机应装设过励磁保护?在配置和整定该保护时应考虑哪些原则?
[电气专业知识问答] 问:为什么现代大型发电机应装设过励磁保护?在配置和整定该保护时应考虑哪些原则? 答:大容量发电机无论在设计和用材方面裕度都比较小,其工作磁密接近饱和磁密.当变压器故障或手动调压甩 ...
- 《公正:该如何做是好?》(Justice: What's the Right Thing to Do? )【youtube上最受欢迎讲座】【哈佛大学最受新生喜爱公共课】【更新BBC里斯讲座】
<公正:该如何做是好?>(Justice: What's the Right Thing to Do? )[youtube上最受欢迎讲座][哈佛大学最受新生喜爱公共课][更新BBC里斯讲座 ...
- 隐私保护:如何在社交媒体平台上保护用户隐私
作者:禅与计算机程序设计艺术 <隐私保护:如何在社交媒体平台上保护用户隐私>技术博客文章 引言 1.1. 背景介绍 随着互联网的快速发展,社交媒体平台已经成为人们在线交流.分享.表达意见的 ...
最新文章
- 自然语言处理NLP之语义相似度、语言模型、doc2vec
- Android关于SQLiteOpenHelper的封装
- 实验 3 检查点和参数化实验报告--软件功能测试与性能测试实验
- 《Python 黑科技》程序员必须会的代理ip小技巧
- 基础算法 —— 高精度计算 —— 高精度加法
- 使用 mybatis + flying + 双向相关建模 的电商后端
- Win32 SDK消息处理技巧
- Angular2的input和output(原先的properties和events)
- cmd-ssh使用说明
- (完整版)c语言初学必背代码
- 德国-帕德博恩大学轴承数据集解读
- 谷歌chrome浏览器安装json插件
- 远程 交换机 日志服务器,交换机怎么配置 日志发送日志服务器
- php mb_eregi_replace 只替换一个,mb_eregi_replace多个匹配得到它们
- java算法:1234组成无重复的三位数
- 云计算效果如何,Mixpanel现身说法
- xcode 软件˙∆集~
- 【IXDC 2014】小米、BroadLink对垒智能Wi-Fi模块
- jq 自动打开浏览器_微信QQ跳转浏览器打开代码
- 第三章微分中值定理及导数应用(柯西中值和泰勒公式)