【问题标题】:Set up class properties in a loop在循环中设置类属性
【发布时间】:2013-12-24 18:46:35
【问题描述】:

我有一个这样的 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++;

}

谢谢。

【问题讨论】:

  • 可能是因为addvalue 中有两个$value。一个在函数参数中,一个在foreach
  • 另外,你到底有什么问题?
  • 嗨。这两个 $value 可能有问题,也可能没有。很难说,因为那只是一个例子。在我的代码中有所不同,它也可以完美运行。我只是想优化它,摆脱一些代码行,而是使用循环迭代。谢谢。

标签: php class loops properties


【解决方案1】:

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

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

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

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

【讨论】:

  • 变量 $key 周围的花括号使一切变得不同,完美地实现了目标。你摇滚!
【解决方案2】:

你可以这样做:-

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;

}

分配默认值。如果那是你想要达到的目标,我不能 100% 确定。

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

【讨论】:

  • 谢谢。我将替换构造函数名称,尽管使用类名可以正常工作,但这是最佳实践,因为在新的 php 版本中它可能会被弃用。我没有尝试分配默认值,而是初始值。但是作为一个数组。这就是为什么它不能是:var $etc=0,而是在方法内:$etc[n]=0。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-08
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多