在PHP中访问类变量

I'm wondering why the following lines causes an error. doSomething() gets called from another PHP file.

class MyClass
{   
    private $word;

    public function __construct()
    {
        $this->word='snuffy';
    }   
    public function doSomething($email)
    {
        echo('word:');
        echo($this->word); //ERROR: Using $this when not in object context
    }
}

To use your class and method which are not static, you must instanciate your class :

$object = new MyClass();
$object->doSomething('test@example.com');


You cannot call your non-static method statically, like this :

MyClass::doSomething('test@example.com');

Calling this will get you :

  • A warning (I'm using PHP 5.3) : Strict standards: Non-static method MyClass::doSomething() should not be called statically
  • And, as your statically-called non-static method is using $this : Fatal error: Using $this when not in object context


For more informations, you should read the Classes and Objects section of the manual -- and, for this specific question, its Static Keyword page.

How are you calling the method?

Doing

MyClass::doSomething('user@example.com');

will fail, as it's not a static method, and you're not accessing a static variable.

However, doing

$obj = new MyClass();
$obj->doSomething('user@xample.com');

should work.