好的,我的MVC很像
somesite /类名/ classfunction /功能
class test(){
public function test2(){
// action will be 'function' in adress
$action = $this->action ? $this->action : array($this, 'test3');
function test3(){
print 1;
}
$action();
}
}
因此,如果我们运行somesite/test/test2/test3
,它将打印'1',但如果我们运行somesite/test/test2/phpinfo
,它将显示phpinfo。
问题:如何在类函数中检查函数的存在?
UPD
不要忘记phpinfo,function_exists会显示它。
method_exists在类函数中搜索,但不在类函数的函数中搜索
UPD 解决方案
class test{
public function test2(){
// site/test/test2/test3
$tmpAction = $this->parenter->actions[1]; // test3
$test3 = function(){
print 1;
};
if(isset($$tmpAction)){
$$tmpAction();
}else{
$this->someDafaultFunc();
}
}
}
答案 0 :(得分:2)
http://php.net/function-exists
if ( function_exists('function_name') ) {
// do something
}
if ( method_exists($obj, 'method_name') ) { /* */ }
您还应该查看魔术方法__call()
答案 1 :(得分:2)
要检查某个类中是否存在某个方法,请使用:http://php.net/method-exists
$c = new SomeClass();
if (method_exists($c, "someMethod")) {
$c->someMethod();
}
您也可以使用班级名称:
if (method_exists("SomeClass", "someMethod")) {
$c = new SomeClass();
$c->someMethod();
}
To" fix"你的问题,让test3()
成为一种类方法:
class test(){
private function test3() {
print 1;
}
public function test2(){
// action will be 'function' in adress
$action = $this->action ? $this->action : array($this, 'test3');
if (method_exists($this, $action)) {
$this->$action();
} else {
echo "Hey, you cannot call that!";
}
}
}
答案 2 :(得分:2)
class test{
public function test2(){
// site/test/test2/test3
$tmpAction = $this->parenter->actions[1]; // test3
$test3 = function(){
print 1;
};
if(isset($$tmpAction)){
$$tmpAction();
}else{
$this->someDafaultFunc();
}
}
}