在PHP中使用保存在类对象中的参数调用函数

时间:2014-06-06 16:17:16

标签: php function oop alias

想象一下这种情况:

Class A extends B{
    public function hi(){
        echo $this->myVar->greeting("Hello", "World");
    }
}

Class B{
    public $myVar;

    public function __construct(){
        $this->myVar->greeting = $this->myFunction($x, $y);
    }

    public function myFunction($x, $y){
        return $x." ".$y;
    }
}

$myClass = new A();
$myClass->hi();

我想要做的是在类属性($ myVar)中放入一个属于同一个类的函数。 并从另一个班级("儿童班")调用它。

这可能吗?

我知道A类我可以做到:

$this->myFunction("Hello", "World");

但我想做复杂的版本: - )

我想要的是像$ myVar中调用该函数的别名。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

查看call_user_func()call_user_func_array()

call_user_func_array(array($myObject,'myMethod'), $argumentsArray);

否则你可以静态调用

类名::类方法()

答案 1 :(得分:1)

如果你希望greeting成为类变量$myVar中的函数,你应该尝试像

这样的函数
Class B{
    public $myVar;

    public function __construct(){
        $this->myVar->greeting ='self::myFunction';
    }

    public static function myFunction($x, $y){
        return $x." ".$y;
    }
}

请注意,我将myFunction变为静态函数。在PHP 5.4中,当使用参数调用字符串变量时,它将搜索具有该名称的函数。

修改

可以通过事先声明属性来解决空值警告。无论如何,我不得不求助于call_user_func来完成整个工作。

Class A extends B{
    public function hi()
    {
        echo call_user_func($this->myVar->greeting,'Hello','World' );
    }
}

Class B{
    public $myVar;

    public function __construct()
    {
        $this->myVar=new StdClass();
        $this->myVar->greeting ='self::myFunction';
    }

    public static function myFunction($x, $y)
    {
        return $x." ".$y;
    }
}

$myClass = new A();
$myClass->hi();