我想防止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'
答案 0 :(得分:3)
一个常见问题(例如How to get called function name in __construct without debug_backtrace),但在一个设计良好的应用程序中,一个类不必知道从哪里调用它,或者防止在请求时实例化。
如果您需要此类限制,请将您的类设为允许访问它的主类的私有属性。
如果您必须这样做,请将调用者作为参数传递给方法,而不是极其低效的debug_backtrace方法。
答案 1 :(得分:0)
在类foo
中声明B
,然后将其设为私有,并且可选地为final。为什么要在A
中定义一个只能由B
调用的方法?