我有一个 woocommerce 插件,它有一个类Foo
:
function wc_foo_init(){
class WC_Foo extends WC_Shipping_Method{
$var=get_option(); //gets an option for this session
function sayHello(){
echo $var;
}
new WC_Foo();
}
我想把sayHello()
从Foo
类中叫出来:
function bar(){
WC_Foo->sayHello();
}
但是我收到此错误:
Fatal error: Call to a member function `sayHello` on a non-object.
在调用类的方法之前,必须实例化类:
$foo = new WC_Foo();
$foo->sayHello();
或者,如果您的 PHP 版本高于 5.4,您可以执行以下操作:
(new WC_Foo())->sayHello();
如果要在类中调用方法$this请使用选择器
function bar(){
$this->sayHello();
}
如果要从其他地方调用该方法,您需要像这样实例化类:
$object = new WC_Foo();
$object->sayHello();
或者使方法静态,如下所示:
public static function sayHello(){
echo "Hello";
}
并像这样称呼它:
WC_Foo::sayHello();
// this way you dont need $object = new WC_Foo();
这可能不是完整的代码,所以你那里的东西很奇怪,但让我们开始吧。
由于您有一个函数来初始化您的对象,您可能希望至少返回该实例。此代码可能有助于您了解:
function init_foo(){
class foo{
function say(){
echo 'hello';
}
}
$foo1 = new Foo();
return $foo1;
}
function bar($foo3){
$foo3->say();
}
$foo2 = init_foo();
bar($foo2);
因此,首先我们创建对象并返回它。然后我们将其注入到 bar 函数中,之后只需要调用该方法即可。(我使用了不同的var名称,因此更容易理解范围)