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プロパティが宣言されていないため、使用すると致命的なエラーが発生します。$thisパブリック変数としてアクセスできるようになるものを使用する必要があります。

<?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 に答える