我正在尝试减少API类的代码,我想要做的是在调用类内部的方法之前确保方法存在。
将传递方法作为变量需要查看该方法是否存在于类中,然后运行该方法。
以下示例代码:
<?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'));
?>
这甚至可能吗?
答案 0 :(得分:1)
您只需将$this->$action
更改为$this->{$action}();
即可。
答案 1 :(得分:0)
您的构造函数名称中有一个拼写错误;其次,在调用method_exists()
函数时,您应该将$this
作为第一个参数传递,而不是$this->obj
:
public function __construct($action,$postArray)
{
$this->data = $postArray;
if (method_exists($this, $action)) {
$this->{$action}();
}else{
die('Method does not exist');
}
}