php嵌套class,PHP7中的嵌套类或内部类

C,Java和甚至Ruby(和可能的其他编程语言)允许嵌套/内部类在主类中,允许使代码更面向对象和组织,在PHP中,我想做一些这样的事情:

这是可能在PHP吗?我该如何实现呢?如果这是不可能的,未来的PHP版本可能支持嵌套类?

嵌套类与其他类相关,有别于外部类。以Java为例:

非静态嵌套类可以访问包含类的其他成员,即使它们被声明为私有。另外,非静态嵌套类需要实例化父类的实例。

使用它们有几个令人信服的理由:

>这是一种逻辑分组只在一个地方使用的类的方法。If a class is useful to only one other class, then it is logical to

relate and embed it in that class and keep the two together.

>它增加封装。Consider two top-level classes, A and B, where B needs access to

members of A that would otherwise be declared private. By hiding class

B within class A, A’s members can be declared private and B can access

them. In addition, B itself can be hidden from the outside world.

>嵌套类可以导致更可读和可维护的代码。A nested class usually relates to it’s parent class and together form a “package”

在PHP中,你可以在没有嵌套类的PHP中有类似的行为。

如果所有你想实现的是结构/组织,如Package.OuterClass.InnerClass,PHP命名空间可能sufice。你甚至可以在同一个文件中声明多个命名空间(虽然,由于标准的自动加载功能,这可能不可取)。

如果你想模仿其他特性,如成员可见性,需要更多的努力。

定义“包”类

用例

测试

输出:Call from parent -> I'm Package protected method

I'm Package protected method

Siblings

Call from Package -> I'm Package protected method

Fatal error: Call to protected Package::__construct() from invalid context

注意:

我真的不认为试图在PHP中模仿innerClasses是一个好主意。我认为代码不那么干净,可读。此外,可能有其他方法使用一个良好建立的模式,如观察者,装饰者ou组织模式实现类似的结果。有时,即使简单的继承也是足够的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值