PHP Fatal error: Using $this when not in object context

后端 未结 9 2362
日久生厌
日久生厌 2020-11-22 03:48

I\'ve got a problem:

I\'m writing a new WebApp without a Framework.

In my index.php I\'m using: require_once(\'load.php\');

9条回答
  •  無奈伤痛
    2020-11-22 04:26

    You are calling a non-static method :

    public function foobarfunc() {
        return $this->foo();
    }
    

    Using a static-call :

    foobar::foobarfunc();
    

    When using a static-call, the function will be called (even if not declared as static), but, as there is no instance of an object, there is no $this.

    So :

    • You should not use static calls for non-static methods
    • Your static methods (or statically-called methods) can't use $this, which normally points to the current instance of the class, as there is no class instance when you're using static-calls.


    Here, the methods of your class are using the current instance of the class, as they need to access the $foo property of the class.

    This means your methods need an instance of the class -- which means they cannot be static.

    This means you shouldn't use static calls : you should instanciate the class, and use the object to call the methods, like you did in your last portion of code :

    $foobar = new foobar();
    $foobar->foobarfunc();
    


    For more informations, don't hesitate to read, in the PHP manual :

    • The Classes and Objects section
    • And the Static Keyword page.


    Also note that you probably don't need this line in your __construct method :

    global $foo;
    

    Using the global keyword will make the $foo variable, declared outside of all functions and classes, visibile from inside that method... And you probably don't have such a $foo variable.

    To access the $foo class-property, you only need to use $this->foo, like you did.

提交回复
热议问题