2016-06-26 8 views
-1

私はそうのように、静的にPHPの__toString()メソッドを使用したい:PHP:__toString()というマジックメソッドの静的な変形?

class MyClass { 
    public static function __toString() { 
     echo 'Hello, I am MyClass!'; 
    } 
} 

echo (string) MyClass; 

残念ながら__toString()は、静的メソッドにはできませんけれども。これが可能だったのは素晴らしいことだと思うので、私の質問は:これはPHP開発者に機能リクエストとして提案するのに妥当なものですか?もしそうでなければ、どうすればこのような機能を私の例が現実的に可能なものに近づけることができますか?

+4

なぜこれが必要ですか?私は実際にユースケースを考えることはできません。 – jornane

+0

ユースケースの例:Yii2では、すべてのオブジェクトベースのクラスにstatic [* className()*](http://www.yiiframework.com/doc-2.0/yii-base-object.html#className() - 詳細)メソッド。それがするのは、呼び出されたクラス文字列を返すことだけです。 static * __ toString()*を使用すると、そのメソッドは必要なくなります。 – mae

+1

'MyClass :: class'はどうですか? – tkausl

答えて

3

あなたが書くことができます。

echo MyClass::class; 

それとも、より多くの制御が必要な場合:

class MyClass { 
    static $name = self::class; 
} 

echo MyClass::$name; 
:あなたは静的クラスプロパティを持つようにしたい場合は

class MyClass 
{ 
    public static function getClass() 
    { 
     return get_class(); 
    } 
} 

echo MyClass::getClass(); 

を、あなたはこれを使用することができますが

this answerも参照してください。

+0

私たちは文字列を変更することができないので完璧ではありませんが、得られるほど良いと思います。 – mae

+0

より多くの制御を与える代替を追加しました。 – trincot

+0

クラスプロパティ(例えば '' 'public $ var = MyClass :: getClass();' ')を宣言するときには使用できないので、理想的ではありません。 – mae

関連する問題