4

最初にオブジェクトを変数に割り当てることを強制せずに、一時的に宣言されたオブジェクトでメソッドを呼び出す方法はありますか?

下記参照:

class Test
{
   private $i = 7;      
   public function get() {return $this->i;}   
}

$temp = new Test();
echo $temp->get(); //ok

echo new Test()->get(); //invalid syntax
echo {new Test()}->get(); //invalid syntax
echo ${new Test()}->get(); //invalid syntax
4

9 に答える 9

8

この動作が必要な場合は、次の回避策を使用します。

この関数を (グローバル スコープで) 宣言します。

function take($that) { return $that; }

次に、次のように使用します。

echo take(new Test())->get();
于 2010-02-07T19:52:25.413 に答える
7

あなたができることは

class Test
{
   private $i = 7;      
   public function get() {return $this->i;}

   public static function getNew() { return new self(); }
}

echo Test::getNew()->get();
于 2010-02-07T18:02:21.737 に答える
4

なぜこれをしないのですか:

class Test
{
   private static $i = 7;      
   public static function get() {return self::$i;}   
}

$value = Test::get();
于 2010-02-07T18:06:26.217 に答える
3

残念ながら、それはできません。残念ながら、それはPHPのやり方です。

于 2010-02-07T17:55:14.887 に答える
3

いいえ。これは PHP のパーサーの制限です。

于 2010-02-07T17:55:50.093 に答える
1

これは古い質問です。最新の回答を提供しているだけです。

サポートされているすべてのバージョンの PHP (2012 年に 5.4.0 以降) で、次のことができます。

(new Test())->get();

https://secure.php.net/manual/en/migration54.new-features.php (「インスタンス化時のクラス メンバー アクセス」)を参照してください。

于 2016-08-04T09:19:29.260 に答える
1

不可能であり、なぜこの方法でオブジェクトを作成するのでしょうか?

オブジェクトのポイントは、固有の状態をカプセル化することです。あなたが示した例では、$i常に7になるため、オブジェクトを作成して$iから取得し、ガベージコレクターにオブジェクトを失うことには意味がありません$i。返された後にオブジェクトへの参照がないためです。他の場所で示されているように、静的クラスは、この目的にははるかに理にかなっています。または閉鎖。

関連トピック:

于 2010-02-07T17:55:48.363 に答える
0

これはごく最近php-internalsで発生しましたが、残念ながら、PHPの開発に積極的な影響力のある人々(狙撃兵など)がこの機能に反対しています。php-internals@lists.php.netにメールを送って、あなたが大人のプログラマーであることを知らせてください。

于 2010-02-07T19:32:54.657 に答える