访问类属性时出现意外行为

时间:2014-03-13 12:16:57

标签: php arrays oop

如果我们在一个类中定义一个数组,并使用一个方法来设置元素,当单独访问这些元素时,我似乎无法打印它们。

我已经设置了一个快速课程来演示这一点。

方法 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]");
    }


}

$ test-> printArrayZero()返回结果

存储在元素0中:数组[0]

$ test-> printLocal()返回结果

存储在元素0中:零

我仍然是OOP的新手,我已经在程序上用PHP编程了一段时间,我之前没有遇到过这个问题。

提前致谢。

2 个答案:

答案 0 :(得分:2)

试试:

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

或:

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

答案 1 :(得分:0)

Yor变量在print_r中表现为字符串部分,请使用此代码

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

请在fillArray之后先调用printArrayZero方法 试试这段代码

$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在创建类对象时调用自动,然后不需要fillArray方法

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