2011-06-18 35 views
3

我试图在一个类上设置一个模棱两可的变量。沿着这些线:php魔法__set

<?php 
    class MyClass { 
    public $values; 

    function __get($key){ 
     return $this->values[$key]; 
    } 

    function __set($key, $value){ 
     $this->values[$key]=$value; 
    } 
    } 

    $user= new MyClass(); 
    $myvar = "Foo"; 
    $user[$myvar] = "Bar"; 
?> 

有没有这样做的方法?

+1

Php不是时髦吗?大声笑 – AntonioCS

+0

请告诉我现在哪种语言是时髦的?我想学习时髦的语言,写出时髦的代码。 –

回答

1

您访问成员变量与 - >操作。

$user->$myvar = "Bar"; 
4

正如已经指出$instance->$property$instance->{$property}使它跳出

如果你真的要访问它作为一个数组索引,实现ArrayAccess界面,并使用offsetGet()offsetSet()等。

class MyClass implements ArrayAccess{ 
    private $_data = array(); 
    public function offsetGet($key){ 
     return $this->_data[$key]; 
    } 
    public function offsetSet($key, $value){ 
     $this->_data[$key] = $value; 
    } 
    // other required methods 
} 

$obj = new MyClass; 
$obj['foo'] = 'bar'; 

echo $obj['foo']; // bar 

注意事项:您不能声明offsetGet以引用形式返回。然而,__get()可以允许嵌套数组元素访问$_data属性,用于读取和写入。

class MyClass{ 
    private $_data = array(); 
    public function &__get($key){ 
     return $this->_data[$key]; 
    } 
} 

$obj = new MyClass; 
$obj->foo['bar']['baz'] = 'hello world'; 

echo $obj->foo['bar']['baz']; // hello world 

print_r($obj); 

/* dumps 
MyClass Object 
(
    [_data:MyClass:private] => Array 
     (
      [foo] => Array 
       (
        [bar] => Array 
         (
          [baz] => hello world 
         ) 

       ) 

     ) 

) 
相关问题