【问题标题】:Setting undeclared property doesn't work in PHP 5.3.x?设置未声明的属性在 PHP 5.3.x 中不起作用?
【发布时间】:2011-12-31 02:56:21
【问题描述】:

谁能告诉我原因:

class foo {

    function __construct() {
        foreach($_GET as $get_var => $val) {
            $this->$get_var = $val;
        }

        foreach($_POST as $post_var => $val) {
            $this->$post_var = $val;
        }

        $this->test = "test";
    }
}

生成并清空对象,即

object(foo)#1 (0) {   
}

还是:

class foo {

public $post;
public $get;


function __construct() {
        foreach($_GET as $get_var => $val) {
            $this->get->$get_var = $val;
        }

        foreach($_POST as $post_var => $val) {
            $this->post->$post_var = $val;
        }
    }
}

工作得很好,即:

object(foo)#1 (2) {
  ["post"]=>
  NULL
  ["get"]=>
  object(stdClass)#3 (2) {
    ["fred"]=>
    string(4) "fish"
    ["joe"]=>
    string(6) "bloggs"
  }
}

这似乎只是 PHP 5.3.x 中的一个问题,但它在我们工作的机器上的 5.2.x 中有效。是 PHP 配置问题还是我遗漏了什么?我查看了 Classes and Objects 文档,但什么也没看到。

这对这个类来说不是什么大问题,但是当涉及到构建数据库类时,这意味着更多的工作。

【问题讨论】:

  • 你应该先声明你的变量。总是。

标签: php class properties


【解决方案1】:

是的,这是 5.3 的问题。实际上你不应该依赖未声明的变量使用,但这里有一些解决方案。

http://www.tonylake.info/?p=159

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-26
    • 2017-03-29
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 2017-03-23
    相关资源
    最近更新 更多