这个PHP静态方法有什么问题?

时间:2011-07-04 08:59:06

标签: php static static-methods

我在类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
我错过了什么吗?或者我是以错误的方式宣布它?

谢谢..

3 个答案:

答案 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