2014-03-13 50 views
0

如果我們在一個類中定義一個數組,並使用方法來設置元素,當單獨訪問這些元素時,我似乎無法打印它們。訪問類屬性時發生意外的行爲

我已經設置了一個快速課程來演示這一點。

方法printArrayZero回報注意:陣列字符串轉換...

方法printLocal是如何我正常訪問單獨的數組元素,這似乎只是正常工作與當地的陣列。

class test 
{ 
    var $a = array(); 

    function fillArray() 
    { 
     $this->a[0] = 'zero'; 
     $this->a[1] = 'one'; 
     $this->a[2] = 'two'; 
     $this->a[3] = 'three'; 
     $this->a[4] = 'four'; 
    } 


    function printArrayZero() 
    { 
     print_r("Stored in element 0 : $this->a[0]"); 
    } 


    function printLocal() 
    { 
     $t[0] = 'zero'; 
     $t[1] = 'one'; 
     $t[2] = 'two'; 
     $t[3] = 'three'; 
     $t[4] = 'four'; 

     print_r("Stored in element 0 : $t[0]"); 
    } 


} 

$測試 - > printArrayZero()返回結果

在存儲元件0:數組[0]

$測試 - > printLocal()返回結果

存儲在元素0:零

我還是比較新的面向對象,我有用程序編程PHP一段時間,我以前沒有遇到過這個問題。

在此先感謝。

回答

2

只是嘗試:

function printArrayZero() 
{ 
    print_r('Stored in element 0 : ' . $this->a[0]); 
} 

或:

function printArrayZero() 
{ 
    print_r("Stored in element 0 : {$this->a[0]}"); 
} 
+2

對於後者,請參閱:http://docs.php.net/language.types.string.php#lang uage.types.string.parsing.complex – VolkerK

+0

是的,我可以這樣做,但我不明白爲什麼它在本地工作,但不是通過屬性訪問時。我偶然發現了這個問題,因爲我有一個很長的字符串,它可以訪問所有內部雙引號的數組元素,程序上這工作得很好,現在看來我必須打破每個數組元素的引號。編輯 - 好吧,我看到我必須使用大括號。謝謝 – cecilli0n

0

尤爾變量表現爲串部分print_r請使用此代碼

function printArrayZero(){ 
    print_r("Stored in element 0 : {$this->a[0]}"); 
} 

而且請的是printArrayZero 後調用fillArray方法首先嚐試這種代碼

$a = new test(); 
$a->fillArray(); 
$a->printArrayZero(); 

或填寫數組__constructor()

public function __constructor(){ 
     $this->a[0] = 'zero'; 
     $this->a[1] = 'one'; 
     $this->a[2] = 'two'; 
     $this->a[3] = 'three'; 
     $this->a[4] = 'four'; 
} 

__constructor通話automaic當你創建類對象則無需fillArray方法

$a = new test(); 
    $a->printArrayZero(); 
+0

不工作.. – cecilli0n

+0

@ cecilli0n,我有更新的代碼,希望它會有所幫助 – Girish

相關問題