2

除了 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)

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

此外,您不能在静态类中使用该技巧。

有更好的主意吗?

4

2 回答 2

6

PHP 确实没有为您提供一种优雅的方式来处理这个问题。无意发起一场语言大战,我会小心翼翼地建议您的设计技能和需求可能已经超出了您工具的限制。PHP 是一种轻量级的脚本语言,它具有很多伪 OOP 特性,但其核心并不是为优雅的企业架构而设计的。

于 2010-03-27T09:04:16.743 回答
2

您可以调用debug_backtrace(FALSE),然后不会填充对象索引。这会稍微加快速度,但一般来说,在生产代码中应避免使用 debug_backtrace,除非您的应用程序是速度不是问题的软件工具,或者将其用于错误处理时。

据我了解,你想

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

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

于 2010-03-27T09:01:00.603 回答