我正在研究PHP代码.
以下是解释我的问题的示例代码:
class Foo { public function fun1() { echo 'non-static'; } public static function fun2() { echo "static" ; //self::fun1(); //Foo::fun1(); } }
如何从静态方法调用非静态方法?
注意 :
这两个功能都在整个站点中使用,这是未知的.我无法对它们的静态/非静态性质进行任何更改.
Matei Mihai.. 73
您必须在静态方法中创建一个新对象,以访问该类中的非静态方法:
class Foo { public function fun1() { return 'non-static'; } public static function fun2() { return (new self)->fun1(); } } echo Foo::fun2();
结果将是 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');
结果将是 foo - bar
您必须在静态方法中创建一个新对象,以访问该类中的非静态方法:
class Foo { public function fun1() { return 'non-static'; } public static function fun2() { return (new self)->fun1(); } } echo Foo::fun2();
结果将是 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');
结果将是 foo - bar