我正在研究PHP代码.
以下是解释我的问题的示例代码:
class Foo {
public function fun1() {
echo 'non-static';
}
public static function fun2() {
echo "static" ;
//self::fun1();
//Foo::fun1();
}
}
Run Code Online (Sandbox Code Playgroud)
如何从静态方法调用非静态方法?
注意 :
这两个功能都在整个站点中使用,这是未知的.我无法对它们的静态/非静态性质进行任何更改.
Mat*_*hai 73
您必须在静态方法中创建一个新对象,以访问该类中的非静态方法:
class Foo {
public function fun1()
{
return 'non-static';
}
public static function fun2()
{
return (new self)->fun1();
}
}
echo Foo::fun2();
Run Code Online (Sandbox Code Playgroud)
结果将是 non-static
稍后编辑:由于看到了将变量传递给构造函数的兴趣,我将发布该类的更新版本:
class Foo {
private $foo;
private $bar;
public function __construct($foo, $bar)
{
$this->foo = $foo;
$this->bar = $bar;
}
public function fun1()
{
return $this->foo . ' - ' . $this->bar;
}
public static function fun2($foo, $bar)
{
return (new self($foo, $bar))->fun1();
}
}
echo Foo::fun2('foo', 'bar');
Run Code Online (Sandbox Code Playgroud)
结果将是 foo - bar
小智 5
主要区别在于您可以调用类的静态方法,而不必实例化该类的对象。所以,在你的静态方法中尝试
Foo $objInst = new Foo();
$objInst->fun1();
Run Code Online (Sandbox Code Playgroud)
但我不明白这在任何情况下都有什么意义。