前端之家收集整理的这篇文章主要介绍了
为什么PHP允许通过子类中的覆盖将受保护和私有方法公开?,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
从一些简短的说明中,我发现当我执行以下操作时,在覆盖子类中的超类
方法时会收到
错误:
>使用私有子类方法覆盖受保护的超类方法
>使用受保护或私有子类方法覆盖公共超类方法
但是,如果我在另一个方向上执行,则不会抛出任何错误:
>使用受保护或公共子类方法覆盖私有超类方法
>使用公共子类方法覆盖受保护的超类方法
这似乎对我来说是直观的 – 我期望它能够以其他方式工作,以便强化信息隐藏和封装.这似乎允许通过允许内部人员以可能破坏其他方法的方式暴露内部设计,并且我无法看到这种情况是一个好主意.为什么这样被实现了,我错过了什么?
此外,其他编程语言中的标准做法是?
你所谓的“执行信息隐藏”是一种可能会破坏子类的东西,因为突然的
属性和
方法可能会消失.你不能以这种方式摆脱限制来破坏事物.
私有有点不同:在这种情况下,属性/方法不存在于子类的角度.因此,没有理由,为什么一个子类不能引入一个具有该名称的属性,因为它将是一个不同的属性.
您是对的,这可能导致设计不好,但是您总是可以构建一个设计不良的应用程序.