设置未声明的属性在PHP 5.3.x中不起作用?

时间:2011-11-17 08:07:29

标签: php class properties

任何人都可以告诉我原因:

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文档,看不到任何内容。

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

1 个答案:

答案 0 :(得分:0)

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

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