$ Object中的变量和变量范围

时间:2013-09-08 11:56:44

标签: php oop scope

我正在尝试编写一个类,但我遇到了两个错误。

class Foo {

    protected $count;

    function __construct() {
        $this->count = sizeof($_POST['some_key']);
    }

    static function get_count() {
        echo $this->count; // Problem Line
    }
}

$bar = new Foo;
$bar->get_count(); // Problem Call

问题调用在最后一行。在“// Problem Line”注释的行中使用$ this会生成“在不在对象上下文中时使用$ this”错误。使用“self :: count”代替“this-> count”会生成“未定义的类常量错误”。我能做错什么?

2 个答案:

答案 0 :(得分:3)

get_count是静态的。静态方法属于类,而不是实例。因此,在静态方法调用中,不是 this。同样,您不能在静态方法中引用具体成员变量(例如count)。

在您的示例中,我并不真正理解为什么使用static关键字(因为您所做的只是回显成员变量)。删除它。

答案 1 :(得分:1)

我建议您执行以下操作:

class Foo {

    protected $count;

    function __construct($some_post) {
        $this->count = sizeof($some_post);
    }

    function get_count() {
        echo $this->count;
    }
}

$some_post = $_POST['some_key'];
$bar = new Foo;
$bar->get_count($some_post);

OR:

class Foo {

    protected $count;

    function __construct() {
        global $_POST;
        $this->count = sizeof($_POST['some_key']);
    }

    function get_count() {
        echo $this->count;
    }
}

$bar = new Foo;
$bar->get_count();