PHP:朋友类和ungreedy调用函数/类

时间:2010-03-27 08:47:32

标签: php scope friend internal debug-backtrace

有什么方法可以使用除debug_backtrace()以外的其他方式获取调用函数吗?

我正在寻找一种不那么贪婪的方式来模拟 friend internal 等范围。

假设我有A班和B班。

到现在为止,我一直在使用debug_backtrace(),这太贪婪了(恕我直言)。

我想到了这样的事情:

<?php

    class A
    {
        public function __construct(B $callerObj) {}
    }

    class B
    {
        public function someMethod()
        {
            $obj = new A($this);
        }
    }
?>

如果你想将它限制在一个特定的类中,可能没问题,但是假设我有300个类,我想将它限制为25个?

一种方法是使用接口进行聚合:

public function __construct(CallerInterface $callerObj)

但它仍然是一个丑陋的代码

此外,你不能使用静态类的技巧。

有更好的主意吗?

2 个答案:

答案 0 :(得分:6)

PHP实际上并没有为您提供一种优雅的处理方式。没有意义开始语言的火焰,我会小心翼翼地建议你的设计技巧和需求可能已超出你的工具的限制。 PHP是一种轻量级脚本语言,它有许多伪OOP功能,但从本质上讲,它并不是为优雅的企业架构而设计的。

答案 1 :(得分:2)

您可以调用debug_backtrace(FALSE),然后不会填充对象索引。这会加快一点速度,但通常情况下,生产代码中应避免使用debug_backtrace,除非您的应用程序是速度不是问题的软件工具或用于错误处理的软件工具。

据我所知,你想要

  • 隐含引用被调用者和
  • 中可用的调用者
  • 对所选类的私有和受保护属性的外部访问。

PHP中都不存在(和破坏封装imho )。有关讨论,请参阅