doucheng5209 2015-10-08 18:20
浏览 20
已采纳

在运行之前动态检查可用方法

I am trying to reduce code on an API class, what I am looking to do is to make sure a method exists before calling the method inside of the class.

Will be passing a method as a variable need to see if that method exists inside of the class then run the method.

Sample code below:

<?php
    class Test {

    private $data;
    private $obj;

    public function __contruct($action,$postArray)
    {

        $this->data = $postArray;

        if (method_exists($this->obj, $action)) {
            //call method here
            //This is where it fails
            $this->$action;
        }else{
            die('Method does not exist');
        }

    }

    public function methodExists(){
        echo '<pre>';
        print_r($this->data);
        echo '</pre>';
    }

}

//should run the method in the class
$test = new Test('methodExists',array('item'=>1,'blah'=>'agadgagadg'));

//should die()
$test2 = new  Test('methodNotExists',array('item'=>1,'blah'=>'agadgagadg'));
?>

Is this even possible?

  • 写回答

2条回答 默认 最新

  • dongying3744 2015-10-08 18:39
    关注

    You just need to change $this->$action to $this->{$action}(); and it should work.

    More in depth answer here including call_user_func

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大