PHP中确保类中所有类函数仅在给定条件为true时才被调用的最佳方法

PHP中确保类中所有类函数仅在给定条件为true时才被调用的最佳方法,php,Php,我有一个类,其中类的每个函数在执行其代码之前必须检查完全相同的条件: class myObject { public function function1($argument) { if($condition === true) { //Do Something } } public function function2($argument) { if($condit

我有一个类,其中类的每个函数在执行其代码之前必须检查完全相同的条件:

class myObject
{
    public function function1($argument)
    {
        if($condition === true)
        {
            //Do Something
        }
    }

    public function function2($argument)
    {
        if($condition === true)
        {
            //Do Something
        }
    }

    public function function3($argument)
    {
        if($condition === true)
        {
            //Do Something
        }
    }

    public function function4($argument)
    {
        if($condition === true)
        {
            //Do Something
        }
    }
}
我们可以看到,函数1、函数2、函数3、函数4仅在
$condition===true
时执行它们的代码

如果将来我添加另一个名为function5的函数,我将不得不复制此条件

所以我的问题是,在调用类中的任何函数之前,确保条件为true的最佳方法是什么,如果条件为false,则不调用该函数。

我的方法是使用magic function__调用并使类的所有函数都私有:

class myObject
{

    public function __call($method,$args)
    {
        if($condition === true)
        {
            call_user_func_array(array($this,$method),$args);
        }

        return;
    }

    private function function1($argument)
    {
            //Do Something
    }

    private function function2($argument)
    {
            //Do Something
    }

    private function function3($argument)
    {
            //Do Something
    }

    private function function4($argument)
    {
            //Do Something
    }
}

它似乎起作用了。但是,我不确定它是否会一直起作用,也不确定它是否是一种聪明的方法。

第一种方法很正常。但是,也许整个课程的设计都是错误的?如果每个函数都需要完全相同的条件才能为真,那么您可以在构造函数中设置/检查它,并从那里开始处理它?为什么要反复检查该情况?它可以在函数调用之间更改吗

类似的东西可以这样使用:

    try{
       $myClass = new MyClass(); // if no permissions throw exception
    }catch(Exception $e){
       //do something
       return false;
    }
//we know user as permission we go on
    $myClass->function1();
    $myClass->function2();

第二种方法是有效的,但是您会失去phpdoc的一些功能以及自动完成代码的优秀编辑器。这样,您就必须知道每个方法的名称。

为了清晰起见,我坚持使用您的第一个方法,但是您的_call()替代方法肯定会奏效。我想这是个人喜好的问题。谢谢你的回答!问题是情况发生了变化。我简化了代码,但条件实际上是对外部函数的调用,如$myOtherObject->isActivated();返回真或假。我也不能控制调用$myClass->function1()的代码。实际上,$myClass是事件的观察者。当事件发生时,将调用此事件的所有观察者,并且不存在异常的try-catch。另外,抛出一个异常意味着有一个致命的错误,事实并非如此。那么你应该真正编辑你的问题,让它更清楚发生了什么。如果这个例子没有真正的代表性,我们该如何帮助呢?