不在对象上下文中时使用$ this? PHP

时间:2015-02-03 23:56:28

标签: php oop

我有一个PHP课程。在构造函数中,我为属性定义了一个值,然后我必须在方法中访问它。但是,我得到了Fatal error: Using $this when not in object context。我需要在课堂上访问该属性。

class Base {
    public $vat;
    public function __construct() {
        $settingsClass = new GeneralSettings();
        $generalSettings = $settingsClass->getSettings();
        $this->vat = $generalSettings['vat'];
    }
    public function vatPrice($price) {
        $vatPrice = $price + (($this->vat / 100) * $price);
        return self::formatPrice($vatPrice);
    }
}

1 个答案:

答案 0 :(得分:0)

我已经用简单的值测试了你的课程,但没有发现任何错误。

class Base {
    public $vat;
    public function __construct() {
        $this->vat = 75;
    }
    public function vatPrice($price) {
        $vatPrice = $price + (($this->vat / 100) * $price);
        return self::formatPrice($vatPrice);
    }

    public static function formatPrice($price) {
        echo $price;
    }
}

$myClass = new Base();
$myClass->vatPrice(100);

请注意formatPrice是一个静态函数。


  1. 有时您想要引用该类的一个实例的某个属性,仅针对一个对象,因此在这种情况下,您必须定义visibility $bar形式的属性或方法;对于变量或visibility function bar($args...),您可以使用$this进行访问,因为$this是该类的实际实例(当前对象)的引用。
  2. 也许你想在所有人的某个属性中获得相同的值 该类的实例,即:静态属性/方法。在这种情况下,您必须为变量定义visibility static $bar或为函数定义visibility function $bar($args...),并且可以使用self关键字对其进行访问。
  3. 公开,受保护或私有

    当你有类似的东西时:

    class Foo {
        ...
        public static function bar() { ... }
        ...
    }
    

    调用bar()函数如下:

    • Foo之外:self::bar();
    • Foo内部:Foo::bar();

    相反,如果你有这样的事情:

    class Foo {
        ...
        public function bar () { ... }
        ...
    }
    

    然后,

    • Foo之外:

    您必须首先实例化该类,然后从该对象访问bar()

    $myObject = new Foo();
    $myObject->bar();
    
    • Foo: $this->bar();
    • 内部

    请参阅PHP文档中的static keyword参考。