class Editor{ var $Error = '' ; var $Pages; function vol() { $Pages = array(); $this->Pages[] = new page; }}class Page{ var $Id = ''; var $BackImage; function vol() { $BackImage = array(); $this->$BackImage[] = new Decorator; }}class Decorator{ var $Ext = '';}_________________________________________________________//我在使用这个类的时候$Editor = new Editor;$Editor->vol();$Editor->Pages[0]->vol(); //对象定义完成?我只初始化了Pages[0]下的class Decorator对象,为什么下面我可以直接使用page[2]和所有page数组其他元素中的class Decorator ,而不需要我$Editor->Pages[2]->vol()呢?$Editor->Pages[0]->BackImage[0]->Ext = 'str' ;$Editor->Pages[2]->BackImage[2]->Ext = 'str2' ;$Editor->Pages[5]->BackImage[4]->Ext = 'str6' ; //这样使用没有报错
これには警告が表示されるはずです
class Editor{ var $Error = '' ; var $Pages; function vol() { $Pages = array(); $this->Pages[] = new page; }} class Page{ var $Id = ''; var $BackImage; function vol() { $BackImage = array();// $this->$BackImage[] = new Decorator; //Fatal error: Cannot use [] for reading $this->BackImage[] = new Decorator; //只能这样写,因为 $BackImage 是数组 }} class Decorator{ var $Ext = '';} $Editor = new Editor;$Editor->vol();$Editor->Pages[0]->vol(); $Editor->Pages[0]->BackImage[0]->Ext = 'str' ;$Editor->Pages[2]->BackImage[2]->Ext = 'str2'; //Warning: Creating default object from empty value
試してみます
[color=#993300]理由がわかったような気がします:[/color]
//このクラスを使用する場合
$Editor = new Editor
$Editor->vol();
$Editor->Pages[0]->vol(); //オブジェクトの定義は完了しましたか? Pages[0] の下の Decorator クラス オブジェクトを初期化しただけです。
//page[2] および以下のページ配列の他のすべての要素でクラス Decorator を直接使用できるのはなぜですか。
// 私を必要とせずに $Editor- >Pages[2]->vol() はどうですか?
//$Editor->name = "xlc";
echo "
";
$Editor->Pages[10]->BackImage[10]- >Name = 'str' ;
echo $Editor->Pages[10]->BackImage[10]->Name;
var_dump($Editor);
strobject(Editor)#1 (2) { ["Error"]=> string(0) "" ["Pages"]=> array(2) { [0]=> object(Page)#2 (2) { ["Id"]=> string(0) "" ["BackImage"]=> array(1) { [0]=> object(Decorator)#3 (1) { ["Ext"]=> string(0) "" } } } [10]=> object(stdClass)#4 (1) { ["BackImage"]=> array(1) { [10]=> object(stdClass)#5 (1) { ["Name"]=> string(3) "str" } } } } }
// ここに 2 つの文を追加します。または、理解に役立ちます
($ Backimage);
Print_r ($ this- & gt) ; backimage);
}
上記のアイデアを明確にして簡素化し、オブジェクト チェーンとメソッド チェーンの使用を減らすために、クラスの継承を理解する必要があります。上の階の皆さん、ありがとうございます、来てくれて嬉しいです!再度、感謝します! !