2016-04-07 7 views
-1
<?php 

class Store 
{ 
} 

$obj1 = new Store() ; 

$obj1 -> storeName = 'Book Store' ; 

echo $obj1 -> storeName ; 

?> 

このPHPスクリプトを実行すると、出力はBook Storeとなります。PHPオブジェクト指向:オブジェクト定義で宣言されていなくてもプロパティが割り当てられます

プロパティが定義されていないというエラーが発生してはなりませんか?

正確には何が起こっているのですか?

+2

。 – Rizier123

+0

それで、私はそれを外部から宣言できますか? – shiv

+0

はい、デフォルトで公開されます – Rizier123

答えて

0

いつでもどこからでもオブジェクトに新しいプロパティを追加できます。オブジェクトは「書き込み禁止」などのものではありません。添付されたプロパティの可視性はpublicです。

これの簡単な例はstdClassです。このようなオブジェクトに値を設定すると、このメカニズムを介してのみ可能で、それ以外stdClassは全く役に立たないだろう:あなたは、視認性を公開して、それを作成するプロパティに値を代入して

$foo = new stdClass; 
$foo->bar = 'baz'; 
+0

大きな説明!ありがとう!私もこれに関連して2つの疑問を持っています。 1.新しいプロパティ '$ bar'はクラス' $ foo'のインスタンスに限定されていませんか?つまり、クラスの新しいインスタンス、例えば '$ obj2'を作成した場合、' $ bar'は含まれていません。 2.なぜこのコンセプトは存在し、実際にどのように適用できるのか? – shiv

+0

1.はい。プロパティは、追加する特定のオブジェクトにのみ存在します。それはクラスレベルで突然現れません。 2.多くのオブジェクト指向言語は、オブジェクトが多かれ少なかれキー値マップであるこのように動作します。実際にこれを実際に行うべきかどうかは非常に議論の余地があります。私は、クラスレベルで動作すると期待しているすべてのプロパティを宣言し、実行時に新しいプロパティを宣言しないでください。 – deceze

+0

ああ、今のコンセプトは私には分かります。あなたの説明は非常に貴重です。ありがとう! :) – shiv

関連する問題