目錄
回复讨论(解决方案)
首頁 後端開發 php教程 类中嵌套类,再嵌套数组和类,整糊涂了,求解

类中嵌套类,再嵌套数组和类,整糊涂了,求解

Jun 23, 2016 pm 02:25 PM

本帖最后由 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);
    }
你需要了解一下类的属性和类内出现的一般变量的异同

建议你应该去学习 类的继承,能理清并简化你上面的思路,减少对象链、方法链的使用

谢谢楼上各位,有你们真好!再次感谢!!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何用Python寫出求解最小公倍數的演算法? 如何用Python寫出求解最小公倍數的演算法? Sep 19, 2023 am 11:25 AM

如何用Python寫出求解最小公倍數的演算法?最小公倍數是指兩個數中能夠整除這兩個數的最小整數。在數學中,求解最小公倍數是一項基本的數學任務,而在電腦程式設計中,我們可以使用Python來寫一個求解最小公倍數的演算法。以下將介紹基本的最小公倍數演算法,並給出具體的程式碼範例。最小公倍數的數學定義是:若a能被n整除且b能被n整除,則n是a和b的最小公倍數。要求解最小

用C語言程式實現最大公約數求解 用C語言程式實現最大公約數求解 Feb 21, 2024 pm 07:30 PM

標題:以C語言程式實現最大公約數求解最大公約數(GreatestCommonDivisor,簡稱GCD)是指能夠同時整除兩個或多個整數的最大正整數。求解最大公約數對於一些演算法和問題解決非常有幫助。在本文中,將透過C語言程式設計來實現求解最大公約數的功能,並提供具體的程式碼範例。在C語言中,可以使用歐幾裡得演算法(EuclideanAlgorithm)來求解最大

快速計算矩陣逆的方法 - Numpy實現 快速計算矩陣逆的方法 - Numpy實現 Jan 24, 2024 am 08:47 AM

Numpy是Python中著名的科學計算庫,為處理大型多維數組和矩陣提供了豐富的功能和高效的計算方法。在資料科學和機器學習領域,矩陣的逆運算是一項常見的任務。在本文中,我將介紹使用Numpy函式庫快速求解矩陣逆的方法,並提供具體的程式碼範例。首先,讓我們透過安裝Numpy庫引入它到我們的Python環境中。可以使用以下命令在終端機中安裝Numpy:pipinsta

如何使用Python實作求解階乘的演算法? 如何使用Python實作求解階乘的演算法? Sep 19, 2023 am 10:30 AM

如何使用Python實作求解階乘的演算法?階乘是數學中的重要概念,指的是一個數乘上其自身減一,再乘上自身減一減一,以此類推,直到乘到1為止。階乘通常以符號"!"來表示,例如5的階乘表示為5!,計算公式為:5!=5×4×3×2×1=120。在Python中,我們可以使用迴圈來實作一個簡單的階乘演算法。下面給一個範例程式碼:deffacto

學習C語言如何求解最大公約數 學習C語言如何求解最大公約數 Feb 21, 2024 pm 11:18 PM

學習C語言如何解最大公約數,需要具體程式碼範例最大公約數(GreatestCommonDivisor,簡稱GCD)是指兩個或多個整數中能夠整除它們的最大正整數。在電腦程式設計中常會用到最大公約數,特別是在處理分數、化簡分數以及求解最簡整數比例等問題時。本篇文章將介紹如何使用C語言來求解最大公約數,並給出具體的程式碼範例。求解最大公約數的方法有很多種,例如歐

在C/C++中寫出求解模方程式的程式? 在C/C++中寫出求解模方程式的程式? Sep 12, 2023 pm 02:21 PM

在這裡,我們將看到一個與模方程式相關的有趣問題。假設我們有兩個值A和B。我們必須找到變數X可以取的可能值的數量,使得(AmodX)=B成立。假設A為26,B為2。所以X的首選值會是{3,4,6,8,12,24},因此計數為6。這就是答案。讓我們看一下演算法以更好地理解。演算法possibleWayCount(a,b)−begin  ifa=b,thenthereareinfinitesolutions  ifa

求第n個斐波那契數的C/C++程式? 求第n個斐波那契數的C/C++程式? Sep 12, 2023 pm 06:01 PM

斐波那契數列是一個數列,其中下一項是前兩項之和。斐波那契數列的前兩項是0後跟1。在這個問題中,我們會發現斐波那契數列中的第n個數字。為此,我們將計算所有數字並列印n項。 Input:8Output:011235813說明0+1=11+1=21+2=32+3=5使用For迴圈將前兩項求和作為下一項範例#include<iostream>usingnamespacestd;intmain(){  intt1= 0,t2=1,n,i,nextTerm;&am

PHP中如何求解2的乘方? PHP中如何求解2的乘方? Mar 28, 2024 am 11:09 AM

標題:PHP中如何求解2的乘方?具體程式碼範例分享在PHP程式設計中,求解數的乘方是一個常見的需求,特別是在一些演算法和數學計算中。本文將詳細探討如何在PHP中求解2的乘方,並提供具體的程式碼範例供大家參考。在PHP中,可以使用冪運算子**來計算乘方。對於2的乘方,即計算$2^n$,其中$n$是乘方的指數。下面我們將透過幾種不同的方法來實現這個計算。方法一:使用**運

See all articles