1

好的,我有一点 MVC 的工作原理

某个站点/类名/类函数/函数

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();
        }
    }
}
4

3 回答 3

2

http://php.net/function-exists

http://php.net/method-exists

if ( function_exists('function_name') ) {
    // do something
}

if ( method_exists($obj, 'method_name') ) { /* */ }

您还应该查看魔术方法__call()

于 2013-01-16T08:10:02.183 回答
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();
        }
    }
}
于 2013-01-16T08:46:12.647 回答
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();
   }

要“解决”您的问题,请创建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!";
    }
  }
}
于 2013-01-16T08:11:11.737 回答