如何获取创建当前对象的类?

时间:2010-08-02 09:53:57

标签: php class oop

我想防止foo()被B以外的任何其他类执行。如何检查哪个类创建了对象A?

<?php
class A
{
    public function foo()
    {
        if (.... B )    // what should be on the dotts?
           echo 'I\'m created by class B, which is fine';
        else
           echo 'Execution of foo() is not allowed';
    }
}

class B
{
    public function go()
    {
        $a = new A;
        $a->foo();
    }
}

class C
{
    public function go()
    {
        $a = new A;
        $a->foo();
    }
}

$b = new B;
$b->go();  // result: I\'m created by class B, which is fine

$c = New C;
$c->go();  // result: 'Execution of foo() is not allowed'

2 个答案:

答案 0 :(得分:3)

一个常见问题(例如How to get called function name in __construct without debug_backtrace),但在一个设计良好的应用程序中,一个类不必知道从哪里调用它,或者防止在请求时实例化。

如果您需要此类限制,请将您的类设为允许访问它的主类的私有属性。

如果您必须这样做,请将调用者作为参数传递给方法,而不是极其低效的debug_backtrace方法。

答案 1 :(得分:0)

在类foo中声明B,然后将其设为私有,并且可选地为final。为什么要在A中定义一个只能由B调用的方法?