2011-07-04 28 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