Php 从另一个类宽度调用类的静态方法'$这';
我有点问题。 我想从另一个类调用类的Php 从另一个类宽度调用类的静态方法'$这';,php,class,methods,static,Php,Class,Methods,Static,我有点问题。 我想从另一个类调用类的static方法。 类名和方法是动态创建的 这其实并不难做到,比如: $class = 'className'; $method = 'method'; $data = $class::$method(); 但是,我想这样做 class abc { static public function action() { //some code } } class xyz { protected $method = 'a
static
方法。
类名和方法是动态创建的
这其实并不难做到,比如:
$class = 'className';
$method = 'method';
$data = $class::$method();
但是,我想这样做
class abc {
static public function action() {
//some code
}
}
class xyz {
protected $method = 'action';
protected $class = 'abc';
public function test(){
$data = $this->class::$this->method();
}
}
如果我不将$this->class
分配给$class
变量,将$this->method
分配给$method
变量,那么它就不起作用。
问题出在哪里?对象语法
$this->class
,$this->method
在静态调用中与:
组合时,会使解析器感到不明确。我尝试了各种变量函数/字符串插值的组合,比如{$this->class}:{$this->method}()
,等等。。。没有成功。因此,赋值给局部变量是唯一的方法,或者像这样调用:
$data = call_user_func(array($this->class, $this->method));
$data = call_user_func([$this->class, $this->method]);
$data = call_user_func("{$this->class}::{$this->method}");
<?php
class abc {
static public function action() {
return "Hey";
}
}
class xyz {
protected $method = 'action';
protected $class = 'abc';
public function test(){
$data = $this->class::{$this->method}();
echo $data;
}
}
$xyz = new xyz();
$xyz->test();
如果需要传递参数,请使用。在PHP 7.0中,可以使用如下代码:
$data = call_user_func(array($this->class, $this->method));
$data = call_user_func([$this->class, $this->method]);
$data = call_user_func("{$this->class}::{$this->method}");
<?php
class abc {
static public function action() {
return "Hey";
}
}
class xyz {
protected $method = 'action';
protected $class = 'abc';
public function test(){
$data = $this->class::{$this->method}();
echo $data;
}
}
$xyz = new xyz();
$xyz->test();
$此
始终指向当前对象-方法正在其中执行的对象。你不能使用$this
,然后神奇地让它变成其他对象的“this”。即使你可以做$this->$class->action()
,$class
也只是一个字符串。它不是对象,也不指向对象的实例,因此您不能使用它在对象中执行方法,即使该字符串是某个对象的名称。唯一可以使用它的是调用它所表示的类的静态方法。