2011-07-04 13 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()があまりにも静的である場合は、どちらかgetPrefixFromSubCategoyId()があまりにも静的すべきではないではない場合は、fetch()は(上記の例を参照)、静的である必要があり、またはあなたがオブジェクト

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

'static function'では' non-static function'を呼び出すことはできません。 'static'メソッドはクラスを使用すると初期化されますが、' not-static functions'は 'new'キーワードを使用すると初期化されます。 – Tarik

+0

は、ポイントを持って、ありがとうございます:) –

1

$これを必要とする静的

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

それを呼び出します現在のオブジェクトへの参照です。クラスへの参照ではありません。静的に使用しているので、オブジェクトはありません。あなたはそこで静的な呼び出しをしなければなりません。

1

$thisは(あなたがnewで定めるものを持っている場合は、単純なメンバーと基本的には現在のオブジェクト)のインスタンス変数やメソッドを取得するために使用されていますが、あなたが$self::some_varibleを使用する必要がありますし、::は、スコープ解決演算子である静的変数に到達したい場合。

static functionの下で使用する場合は、メソッドまたは変数staticを宣言する必要があります。

関連する問題