2012-01-26 24 views
4

Imは比較的新しいですが、それが強力なツールであることを認識しました。 ここで私の無知を許そう。PHPデフォルトの関数をクラスに割り当てる

デフォルトの機能を持つオブジェクトのセットを作成したいとします。

クラス内の関数を呼び出すのではなく、クラス/オブジェクト変数を出力するだけで、デフォルトの関数、つまりtoString()メソッドを実行できます。

質問: クラスにデフォルト関数を定義する方法はありますか?

class String { 
    public function __construct() { } 

    //This I want to be the default function 
    public function toString() { } 

} 

使用

$str = new String(...); 
print($str); //executes toString() 

答えて

10

デフォルトの関数のようなものはありませんが、特定の状況で自動的に起動することができ、クラスのための魔法の方法があります。あなたのケースでは、マニュアルから__toString()

http://php.net/manual/en/language.oop5.magic.php

例を探しています:

// Declare a simple class 
class TestClass 
{ 
    public $foo; 

    public function __construct($foo) 
    { 
     $this->foo = $foo; 
    } 

    public function __toString() 
    { 
     return $this->foo; 
    } 
} 

$class = new TestClass('Hello'); 
echo $class; 
?> 
+0

これは文字列として要求されたときにクラスを返す方法を定義する方法として使用されていませんか? – MetalFrog

+2

はい、それはここに質問のようです –

+0

私はこのメソッドが好きです、非常に明確でシンプルな、傾きはGoogleがそれを見つけることを信じていません。ありがとうございました.. – IEnumerable

1

のどちらかが、toStringのToString関数を__construct内のコード、またはポイントを置きます。

class String { 
    public function __construct($str) { return $this->toString($str); } 

    //This I want to be the default function 
    public function toString($str) { return (str)$str; } 
} 

print new String('test'); 
1

は、オブジェクトを印刷するときに呼び出されます。つまり、echo $ strです。

__call()は、どのクラスのデフォルトメソッドです。

+0

すべての魔法の機能を過負荷にすることができますか? – IEnumerable

関連する問題