2016-05-11 4 views
0

、私はそうのようなワンステップでオブジェクト(あるstdClassの新しいインスタンス)を宣言する能力が好き:クラス/特性のプロパティとして(オブジェクト)に配列をキャストする方法はありますか? PHPで

$obj = (object) ['a','b','c'];

これは素晴らしい作品...クラスのプロパティとしてしかし

class Foo { 
    public $obj = (object) ['a','b','c']; 
} 

私は次のエラーを取得する:

syntax error, unexpected '(object)' (object) (T_OBJECT_CAST)

ですこれを達成する別の方法を再?そして、誰かがなぜ上記のコードが許可されていないのかを知っていますか?どこでも特定のドキュメントを見つけることができませんでした。

+0

コンストラクタ内にキャストしようとしましたか? – JavaMachine

+0

私はあなたが少なくとも私が知っているように、私は新しいバージョンでこの表記法が追加されているかわからない、PHPでjson記法を使用することはできないと思う。次に、オブジェクトにキャストしたい場合は、配列をassoc配列に変換する必要があると思います。 – NoImaginationGuy

+0

特に、特性を使用すると、1ライナーのキャストアプローチは非常に便利です。オブジェクトを定義して設定するための方法は他にありませんそれ(AFAIK)。そして、形質と組み合わされたコンストラクタの実装はまっすぐな悪いニュースなので、私は配列で生きなければならないでしょう。 –

答えて

3

PHP Docsからの引用:

They [object properties] are defined by using one of the keywords public, protected, or private, followed by a normal variable declaration. This declaration may include an initialization, but this initialization must be a constant value -- that is, it must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated.

(私の強調)

そして

public $obj = (object) ['a','b','c']; 

run-time情報に依存している、つまり実行時

をオブジェクトへの配列の鋳造を

ラウンドを得る方法コンストラクタの値を代入するのは

+0

説明とリンクをありがとう! (私が以前に完全に欠けていた場所へ)私の特別な使い方は特性の中にあるので、残念なことにコンストラクタの割り当ては私には行きません。 –

関連する問題