【问题标题】:Class property set removing part of a string类属性集删除部分字符串
【发布时间】:2014-02-06 18:25:36
【问题描述】:

我有这个函数来填充我的类变量。当有文件要处理时,会调用handle_uploaded_files(),返回一个逗号分隔的文件列表名。

当我访问 $this->image 时,值是正确的 ("image(1).jpg,image(2).jpg,image(3).jpg,image(4).jpg"),但是当访问类外的属性时,我收到一个奇怪的结果:只有逗号,但在此之间没有值 (",,,")。

public function fill_vars($array, $files = null) {
    foreach(array_keys($array) as $key => $value) {
        $this->$value = $array[$value];
        if (!empty($files)) {
            foreach ($files as $key => $value) {
                $this->$key = handle_uploaded_files($files[$key]);
            }
        }
    }
}

我不知道发生了什么。有什么建议吗?

对不起,我的英语不好。

【问题讨论】:

    标签: php string class properties


    【解决方案1】:

    重命名内部foreach-循环中的变量。您从外部循环覆盖 $key$value

    在外循环中调用array_keys($array) 毫无意义,因为$key 成为新生成数组中键的数字索引。相反,你可以写

    foreach($array as $key => $value) {
        $this->$key = $value;
        /* ... */
    }
    

    这仅在$key 是有效标识符时才有效。但这与您的代码没有什么不同。

    内循环可以改写为

    $this->$key = handle_uploaded_files($value);
    

    但你绝对应该先重命名内部循环变量。

    之后,您可以检查内部循环中的$this->$key 是否应该覆盖外部循环中的$this->$key

    【讨论】:

    • 你的回答很完美。我现在感觉有点傻,但是这种事情发生了。而且我不需要更改我的内部 foreach 变量,我只需要将第二个循环移动到第一个循环之外。谢谢,伙计!
    猜你喜欢
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    相关资源
    最近更新 更多