参考PHP类函数方法

时间:2013-03-06 14:50:37

标签: php

我有一个班级:

class demo {

      function newDemo(){
          $v=$this->checkDemo;
          $v('hello'); // not working this reference, or how to do this?
      }

      function checkDemo($a){
          ...
          return $a;
      }
           }

那么,我如何在类中引用checkDemo函数方法?

8 个答案:

答案 0 :(得分:6)

要使对象方法可调用,您需要一个数组。索引0是实例,索引1是方法的名称:

$v = Array($this,"checkDemo");
$v("hello");

编辑:请注意,此功能仅适用于PHP 5.4

答案 1 :(得分:3)

你这样分配:

$v = 'checkDemo';
$this->$v('hello');

查看the documentation了解更多示例。

虽然我不完全确定为什么你会这样做,但事情就是这样。

答案 2 :(得分:1)

PHP Manual

<?php
class Foo
{
    function Variable()
    {
        $name = 'Bar';
        $this->$name(); // This calls the Bar() method
    }

    function Bar()
    {
        echo "This is Bar";
    }
}

$foo = new Foo();
$funcname = "Variable";
$foo->$funcname();  // This calls $foo->Variable()

?>

答案 3 :(得分:0)

如果你只是:

,那会不会更容易和更简单
class demo {

      function newDemo(){
          echo $this->checkDemo('hello');
      }

      function checkDemo($a){
          return $a;
      }
}

$demo = new demo;

$demo->newDemo(); // directly outputs "hello", either to the browser or to the CLI

答案 4 :(得分:0)

当您可以直接拨打$ this-&gt; checkDemo($ data)

时没用

然而......你可以这样做

$v=function($text){ return $this->checkDemo($text); };
echo $v('hello');

答案 5 :(得分:0)

只需调用call_user_func函数,并从对象引用和方法名称作为第一个参数传递数组:

class demo {

      function newDemo(){
          return call_user_func( array( $this, 'checkDemo' ), 'hello' );
      }

      function checkDemo( $a ){
          ...
          return $a;
      }
}

答案 6 :(得分:0)

这样做的一种方法:

<?php
class HelloWorld {

    public function sayHelloTo($name) {
        return 'Hello ' . $name;
    }

public function test () {
   $reflectionMethod = new ReflectionMethod(__CLASS__, 'sayHelloTo');
   echo $reflectionMethod->invoke($this, 'Mike');

    }

}

$hello = new HelloWorld();
$hello->test();

http://www.php.net/manual/en/reflectionmethod.invoke.php

答案 7 :(得分:-2)

调用函数时必须添加参数:

$v = $this->checkDemo('hello');