2

有什么方法可以在方法内创建类静态变量吗?像这样的东西..

class foo {

    public function bind($name, $value) {
         self::$name = $value;
    }

};

还是有其他解决方案可以将变量绑定到类,然后在没有长而丑陋的语法“$this->”的情况下使用它

4

2 回答 2

3

我不确定我是否理解这个问题。但是如果你想在运行时附加变量,你可以这样做:

abstract class RuntimeVariableBinder
{
    protected $__dict__ = array();

    protected function __get($name) {
        if (isset($this->__dict__[$name])) {
            return $this->__dict__[$name];
        } else {
            return null;
        }
    }

    protected function __set($name, $value) {
        $this->__dict__[$name] = $value;
    }
}


class Foo
extends RuntimeVariableBinder
{
    // Explicitly allow calling code to get/set variables
    public function __get($name) {
        return parent::__get($name);
    }
    public function __set($name, $value) {
        parent::__set($name, $value);
    }
}

$foo = new Foo();
$foo->bar = "Hello, world!";
echo $foo->bar; // Prints "Hello, world!"

http://codepad.org/H9bz2uVp

于 2012-12-28T01:44:47.053 回答
1

使用self将导致致命错误,因为该属性未声明。您必须使用$thiswhich 才能作为公共变量访问:

<?php
class foo { 
    public function bind($name, $value) {
         $this->$name = $value;
    }

}

$foo = new Foo;
$foo->bind('bar','Hello World');

echo '<pre>';
print_r($foo);
echo $foo->bar;
echo '</pre>';?>
于 2012-12-28T01:41:49.697 回答