想象一下这种情况:
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中调用该函数的别名。 提前谢谢。
答案 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();