PHP - 确保只有一个特定类可以创建另一个特定类的实例的最佳方法

时间:2015-02-24 08:11:28

标签: php class object instantiation

什么可能是确保只有一个特定的类可以在PHP中创建另一个特定类的实例而不需要嵌套类的最佳方法?是否有任何模式或我被迫使用Reflection API?

示例:只有对象/类A能够创建B类对象。

1 个答案:

答案 0 :(得分:0)

您可以使用debug_bugtrace()

检查来电者
class Foo
{
  public function __construct()
  {
    $bar = new Bar();
    $bar->test();
  }
}

class Bar
{
  public function test()
  {
      $trace = debug_backtrace();
      if (isset($trace[1])) {
          // $trace[0] is ourself
          // $trace[1] is our caller
          // and so on...
          var_dump($trace[1]);

          echo "called by {$trace[1]['class']} :: {$trace[1]['function']}";

      }
  }
}
$foo = new Foo();

此示例打印called by Foo :: __construct

然后你可以检查来电者的姓名,并在来电者不是那个时拒绝实例

Find out which class called a method in another class