類中嵌套類,又嵌套數組和類,整糊塗了,求解

來源:互聯網
上載者:User
類中嵌套類,再嵌套數組和類,整糊塗了,求解
本帖最後由 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]下的class Decorator對象,
//為什麼下面我可以直接使用page[2]和所有page數組其他元素中的class 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設定了報告層級

{
$BackImage = array(1,2,3,4);
$this->BackImage[] = new Decorator;
//這裡增加兩句或者可協助你理解
print_r($BackImage);
print_r($this->BackImage);
}
你需要瞭解一下類的屬性和類內出現的一般變數的異同

建議你應該去學習 類的繼承,能理清並簡化你上面的思路,減少對象鏈、方法鏈的使用
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.