1

PHP5.4+でできると仮定すると、(new Object)->method()なぜこれができないのか疑問に思っていました:

<?php

class Item {
    public $property = 'test';
}

class Container
{
    public function getItem()
    {
        return new Item();
    }
}

echo get_class(($object = (new Container())->getItem())); // returns Item

// this comes up with error
echo ($object = (new Container())->getItem())->property;

コードの最後の行がトリガーされる理由PHP Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR)

編集:

私の質問とはまったく関係のない回答が表示されているため、質問を明確にする必要があるようです。構文エラーを取り除く方法を尋ねているのではありません。私の質問は、これが Item のインスタンスであると教えてくれるのに($object = (new Container())->getItem())、なぜ式のプロパティにアクセスできないのですか?get_class()

4

2 に答える 2

0

拡張クラスを使用しないのはなぜですか?

class Item {
 public $Val = "Testing";

}

class Container extends Item {

    public function getItem()
    {
        return new Item();
    } // This method is no longer needed

}


$Object = new Container();
echo $Object->Val; // Output of: Testing

これはPHP4から利用可能です

エクステンドのマニュアル

または、OOP Scope からオブジェクトを初期化する場合:

Class Item { 
 public $Val = "SomeString"; 
}

class Container { 
 public $Instance;
 public function __construct(){
   $this->Instance = new Item();
 } 

}
$Object = new Container();
echo $Object->Instance->Val;
于 2013-10-18T13:18:28.223 に答える