【问题标题】:Calling a Wordpress function out of class在课堂外调用 Wordpress 函数
【发布时间】:2016-02-29 14:12:22
【问题描述】:

我有一个 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();
}

我想从Foo 类中调用sayHello()

function bar(){
    WC_Foo->sayHello();
}

但我收到此错误:

Fatal error: Call to a member function `sayHello` on a non-object.

【问题讨论】:

  • 你不能$something = new WS_Foo(); $something->sayHello();吗?
  • 没有。我编辑了帖子。我有另一个构造函数。
  • 因为sayHello() 是一个普通的非静态方法,你需要一个WC_Foo 类的实例来调用它。如果没有更多信息,我们无法真正猜测您是如何创建它的以及它的一般生命周期。
  • @s_puria,请看看我的回答,如果这就是你要找的,请告诉我......

标签: php wordpress woocommerce


【解决方案1】:

您必须在调用其方法之前实例化类:

$foo = new WC_Foo();
$foo->sayHello();

或者如果你的 php 版本大于 5.4,你可以这样做:

(new WC_Foo())->sayHello();

【讨论】:

    【解决方案2】:

    如果您在类中调用方法,请使用 $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();
    

    【讨论】:

    • 现在给出:Fatal error: Using $this when not in object context in
    • 如果你有任何问题,我不是反对者,但在问题中指出:sayHello() out of Foo 类: .既然已经下课了,用$this就没多大意义了。
    • 是的,我刚注意到,所以我扩大了答案
    【解决方案3】:

    这可能不是完整的代码,所以你有什么很奇怪,但我们走吧。

    既然你有一个函数来初始化你的对象,你可能至少想要返回那个实例。此代码可能有助于您理解:

    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 名称,以便更容易理解范围)

    【讨论】:

      猜你喜欢
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      相关资源
      最近更新 更多