2011-08-28 4 views
9

私はクラスを持っています。PHPクラスがエラーを投げる、何が間違っています

Class User { 

    private $_name; 
    private $_email; 

    public static function factory() { 
     return new __CLASS__; 
    } 

    public function test() { 

    } 
} 

また、以下の構文を使用して静的メソッド呼び出しを行う場合。

User::factory(); 

構文エラーが発生します。

Parse error: syntax error, unexpected T_CLASS_C in htdocs/test/index.php on line 8 

静的メソッド呼び出し中に静的なfactory()メソッドでオブジェクトを作成できないため、エラーがスローされます。

と私が魔法の定数__CLASSS__を現在のクラスの名前、つまりUserに変更すると、それは動作します。

何が欠けていますか?

+0

は、なぜあなたは 'self'または' $ this'を返さないのですか?オブジェクトの新しいインスタンスが必要ですか? – powtac

+0

はい、私は呼び出しを行うたびにオブジェクトの新しいインスタンスを作成する必要があります。 –

答えて

10

試してみてください。

Class User { 

    private $_name; 
    private $_email; 

    public static function factory() { 
      $class = __CLASS__; 
      return new $class; 
    } 

    public function test() { 

    } 
} 
+0

もちろん、それは重要なことではありません、私はそのようにオブジェクトを作成したくありません。 –

+0

動的リターンを作成しようとしていますか? –

+0

はい、これはキャッチです –

7

はこれを試してみてください:

$class = __CLASS__; 
return new $class; 
+1

それは動作しません:(、構文エラー、予期せぬT_CONSTANT_ENCAPSED_STRING'を投げます –

+0

@Ibrahim Azhar Armar:申し訳ありません、私の悪い、私は答えを編集しました – JRL

3

は、なぜあなたはself$thisを返さないのですか?

はシングルトンパターンをチェックアウト:http://www.phpbar.de/w/Singletonhttp://php.net/manual/language.oop5.patterns.php

他のソリューションは、なぜあなたの例ではない作品を行い

return clone $this; 
+0

あなたは、最初のリンクにドイツ語のサイトを投稿したことを認識していますか? –

+0

@Jared英語の例にあなたのリンクを追加してください... – powtac

8

本当にわからないだろう。しかし仕事があるん何

public static function factory() 
{ 
    return new self(); 
} 
+0

はもっと良く見えます:) –

関連する問題