我在类category
public static function getPrefixFromSubCategoyId($subCategoryId) {
$prefix = $this->fetch(array('table' => 'subCategories', 'id' => $subCategoryId));
return $prefix[0]['prefix'];
}
我确信我正在使用正确的代码片段,因为当我在类范围之外使用相同的代码并使用以下代码时,它可以正常工作
$category = new Category($dbh);
$subCategoryId = 6;
$prefix = $category->fetch(array('table' => 'subCategories', 'id' => $subCategoryId));
echo $prefix[0]['prefix'];
但是当我使用以下语法初始化静态方法时。
$prefix = Category::getPrefixFromSubCategoyId(4);
它给了我以下错误。
Fatal error: Using $this when not in object context
我错过了什么吗?或者我是以错误的方式宣布它?
谢谢..
答案 0 :(得分:5)
静态方法是类成员,不绑定到对象。这意味着,$this
根本不存在。您不能在静态方法中使用它。如果fetch()
也是静态的,请将其称为静态
self::fetch(/* arguments */);
如果不是getPrefixFromSubCategoyId()
也不应该是静态的,fetch()
应该是静态的(参见上面的例子),或者你需要一个对象
$tmp = new self;
$tmp->fetch(/* arguments */);
答案 1 :(得分:1)
$ this是对当前对象的引用。它不是对班级的参考。由于您静态使用它,因此您没有任何对象。你也必须在那里进行静态调用。
答案 2 :(得分:1)
$this
用于获取实例变量或方法(简单成员,基本上是当前对象,如果你有一个定义new
)但是当你想要到达静态变量时,你应该使用{{ 1}}和$self::some_varible
是范围解析运算符。
如果您想在::
下使用它们,则必须声明方法或变量static
。