在循环中设置类属性

时间:2013-12-07 10:53:45

标签: php class loops properties

我有一个像这样的php类

class data{

    var $counter;
    var $a;
    var $b;
    var $c;
    var $d;
    var $e;
    var $f;
    var $g;
    var $h;
    var $etc;

    function data(){$this->counter=0;}

    function addvalue($value){
        $this->a[$this->counter]=$value;
        $this->b[$this->counter]=0;
        $this->c[$this->counter]=0;
        $this->d[$this->counter]=0;
        $this->e[$this->counter]=0;
        $this->f[$this->counter]=0;
        $this->g[$this->counter]=0;
        $this->h[$this->counter]=0;
        $this->etc[$this->counter]=0;
        $this->counter++;
    }

}

然后,该类的一个对象

if(isset($_SESSION['data'])==0){
    $_SESSION['data']=new data();
}

代码有效,但我很好奇是否可以在foreach循环中设置具有相同值的所有属性:“0”。我试过这种方法没有成功:

function addvalue($value){

    foreach($this as $key => $value){
        if($key!='counter'){$this->$key[$this->counter]=0;}
    }

    $this->a[$this->counter]=$value;
    $this->counter++;

}

谢谢。

2 个答案:

答案 0 :(得分:1)

您的{$this->$key[$this->counter]=0;}声明错误。它应该是

if( $key != 'counter' ) {
    $this->{$key}[$this->counter] = 0;
}

(注意$key周围的大括号。)

变量名称的更复杂的动态表达式需要括号语法。

答案 1 :(得分:0)

您可以这样做: -

class data{

    var $counter = 0;
    var $a = 0;
    var $b = 0;
    var $c = 0;
    var $d = 0;
    var $e = 0;
    var $f = 0;
    var $g = 0;
    var $h = 0;
    var $etc = 0;

}

指定默认值。如果这是你想要达到的目标,我不是百分百肯定。

我认为我应该指出PHP现在使用__construct()作为构造函数名称,而不是与该类同名的方法。