我发现在

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继承和受保护的成员可见性相关推荐

  1. 计算机保护分区,磁盘显示为GPT(保护分区)

    问题描述:PE进入系统,在计算机管理里面磁盘显示为GPT(保护分区).此时硬盘是不能重新分区或者格式化的. 解决思路:低版本的WIndows(PE)是不支持GPT分区的,我们需要使用系统自带的Disk ...

  2. 自动实现MS Word保护,Aspose教你如何加密保护Java程序中的DOCX文件

    MS Word允许你用各种机制来保护DOCX文档.你可以设置打开文档所需的密码.另一方面,您可以指定保护级别,如使文档只读,只允许注释或表格字段等. 在这篇文章中,将学习如何自动化MS Word保护功 ...

  3. 保护模式及其编程——实模式与保护模式的切换

    机器上电,CPU进入实模式,从物理地址0xFFFFFFFF0处开始执行初始化代码,设置基本系统功能操作必要的数据结构信息,例如处理中断和异常的IDT表.接下来,如果继续在保护模式工作,需要加载操作系统 ...

  4. C++ 多继承之如何调用私有成员

    C++ 多继承之如何调用私有成员 #include <iostream> using namespace std;class A {private:int a; public:void s ...

  5. C++之继承探究(二):protected成员

    前文:C++之继承探究(一):继承的概念 protected成员   在下面右例中,子类虽然继承了父类的私有成员b_number,但是在子类的print()函数中依然不能直接访问该私有成员,子类只能通 ...

  6. php 电话中转 保护用户隐私,打车APP的隐私保护通话是如何保护用户号码隐私的...

    原标题:打车APP的隐私保护通话是如何保护用户号码隐私的 隐私保护通话,拿百数的号码隐私保护业务举例来说,是防止用户手机/座机号码隐私泄露的解决方案,适用于网购.出行.求职.外卖等各种场景,可申请全国 ...

  7. 【电气专业知识问答】问:为什么现代大型发电机应装设过励磁保护?在配置和整定该保护时应考虑哪些原则?

    [电气专业知识问答] 问:为什么现代大型发电机应装设过励磁保护?在配置和整定该保护时应考虑哪些原则? 答:大容量发电机无论在设计和用材方面裕度都比较小,其工作磁密接近饱和磁密.当变压器故障或手动调压甩 ...

  8. 《公正:该如何做是好?》(Justice: What's the Right Thing to Do? )【youtube上最受欢迎讲座】【哈佛大学最受新生喜爱公共课】【更新BBC里斯讲座】

    <公正:该如何做是好?>(Justice: What's the Right Thing to Do? )[youtube上最受欢迎讲座][哈佛大学最受新生喜爱公共课][更新BBC里斯讲座 ...

  9. 隐私保护:如何在社交媒体平台上保护用户隐私

    作者:禅与计算机程序设计艺术 <隐私保护:如何在社交媒体平台上保护用户隐私>技术博客文章 引言 1.1. 背景介绍 随着互联网的快速发展,社交媒体平台已经成为人们在线交流.分享.表达意见的 ...

最新文章

  1. 自然语言处理NLP之语义相似度、语言模型、doc2vec
  2. Android关于SQLiteOpenHelper的封装
  3. 实验 3 检查点和参数化实验报告--软件功能测试与性能测试实验
  4. 《Python 黑科技》程序员必须会的代理ip小技巧
  5. 基础算法 —— 高精度计算 —— 高精度加法
  6. 使用 mybatis + flying + 双向相关建模 的电商后端
  7. Win32 SDK消息处理技巧
  8. Angular2的input和output(原先的properties和events)
  9. cmd-ssh使用说明
  10. (完整版)c语言初学必背代码
  11. 德国-帕德博恩大学轴承数据集解读
  12. 谷歌chrome浏览器安装json插件
  13. 远程 交换机 日志服务器,交换机怎么配置 日志发送日志服务器
  14. php mb_eregi_replace 只替换一个,mb_eregi_replace多个匹配得到它们
  15. java算法:1234组成无重复的三位数
  16. 云计算效果如何,Mixpanel现身说法
  17. xcode 软件˙∆集~
  18. 【IXDC 2014】小米、BroadLink对垒智能Wi-Fi模块
  19. jq 自动打开浏览器_微信QQ跳转浏览器打开代码
  20. 第三章微分中值定理及导数应用(柯西中值和泰勒公式)

热门文章

  1. 巧用 PHP 数组函数
  2. lvs之 lvs原理架构介绍
  3. 微信小程序电商系统省市区选择器(二)
  4. Linux笔记 1-8 --文件传输
  5. 对于Activity的理解
  6. fzu 2154 YesOrNo
  7. 三个分级基金(银华100、申万深成、国联双禧)对比图(zz from Fund@newsmth)
  8. K-均值聚类算法对未标注数据分组(1)
  9. C#关于MSMQ通过HTTP远程发送专有队列消息的问题
  10. js 小数取整的函数