我在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
是一个静态函数。
- 有时你想引用类的一个实例的某个属性,只引用一个对象,所以在这种情况下,你必须定义一个形式为
visibility $bar
的属性或方法;对于变量或visibility function bar($args...)
,你可以用$this
访问,因为$this
是类的实际实例(当前对象)的引用。 - 也许您想在某个属性中为所有属性获取相同的值该类的实例,即:静态属性/方法。在这种情况下,您必须为变量定义
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 文档中的静态关键字参考。