除了 debug_backtrace() 之外,还有什么方法可以获取调用者函数吗?

我正在寻找一种不那么贪婪的方式来模拟范围,例如 朋友 或者 内部的.

假设我有一个 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)

但这仍然是一个 丑陋的代码.

而且,你 不能 使用这个技巧 静止的 类。

有更好的主意吗?

有帮助吗?

解决方案

您可以致电 debug_backtrace(FALSE), ,这样就不会填充对象索引。这会稍微加快速度,但通常在生产代码中应避免使用 debug_backtrace,除非您的应用程序是速度不是问题的软件工具或使用它进行错误处理。

据我了解,你想要

  • 在被调用者中有对调用者的隐式引用,并且
  • 对选定类的私有和受保护属性的外部访问。

两者在 PHP 中都不存在(并打破封装恕我直言)。如需讨论,请参阅

其他提示

PHP确实没有提供给您处理这个优雅的方式。我无意启动语言flamewar,我会小心翼翼地表明,你的设计技巧和需求可能已经超出了工具的局限性。 PHP是一个轻量级的脚本语言,有很多伪OOP的功能狂奔到它,但它的核心,它不是以往任何时候都专为优雅的企业架构。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top