ホームページ > バックエンド開発 > PHPチュートリアル > クラス内でクラスをネストし、さらに配列とクラスをネストするのは非常に混乱します。解決してください。

クラス内でクラスをネストし、さらに配列とクラスをネストするのは非常に混乱します。解決してください。

WBOY
リリース: 2016-06-23 14:25:07
オリジナル
1199 人が閲覧しました

この投稿は jerryleeee によって最終編集されました: 2013-10-25 03:26:59

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" } } } } }
ログイン後にコピー

を確認してください。データ Pages[10] のキー値は実際には stdClass クラスのページを作成します。これは Page クラスのインスタンスではありません。これは php5 の機能である必要があります。
最初は魔法の方法に問題があるのか​​と思いましたが、後でそうではないことを確認しました。




エラーがない場合は、php でレポート レベルが設定されているはずです

// ここに 2 つの文を追加します。または、理解に役立ちます
($ Backimage);
Print_r ($ this- & gt) ; backimage);
}
上記のアイデアを明確にして簡素化し、オブジェクト チェーンとメソッド チェーンの使用を減らすために、クラスの継承を理解する必要があります。上の階の皆さん、ありがとうございます、来てくれて嬉しいです!再度、感謝します! !

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート