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


Using $this when not in object context? PHP

我在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);
    }
}

我已经用一个简单的值测试了你的类,我没有发现任何错误。

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 关键字访问它们。

可见性是公共的、受保护的或私有的

当你有类似的东西时:

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

bar()函数的调用方式如下:

  • 福城外:self::bar();
  • 福内部:Foo::bar();

相反,如果您有这样的东西:

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

然后

  • 福城外:

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

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

请参阅 PHP 文档中的静态关键字参考。