2011-07-04 29 views
0

我宣布在类的静态方法category这个PHP静态方法有什么问题?

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

那么,它说你正在使用静态方法中的'$ this',你是,而且是不允许的。 – BoltClock

回答

5

静态方法是类成员,没有绑定到对象。这意味着,$this根本不存在。你不能在静态方法中使用它。如果fetch()是静态也称之为静态

self::fetch(/* arguments */); 

如果没有任何getPrefixFromSubCategoyId()不应该是静态也fetch()应该是静态的(见上面的例子),或者你需要一个对象

$tmp = new self; 
$tmp->fetch(/* arguments */); 
+2

你不能在静态函数下调用''非静态函数',一旦你使用了类,'static'方法被初始化,但是当你使用'new'关键字时''非静态函数'被初始化。 – Tarik

+0

明白了,非常感谢你:) –

1

$此是对当前对象的引用。这不是对班级的提及。既然你是静态使用它,你没有任何对象。您也必须在那里进行静态调用。

1

$this用于获取实例变量或方法(简单的成员,基本上当前的对象,如果你有一个与new定义),但是当你想达到的静态变量,你应该使用$self::some_varible::是范围解析操作符。

如果您想在static function下使用它们,则必须声明方法或变量static