gpt4 book ai didi

php 魔术方法 __set

转载 作者:可可西里 更新时间:2023-11-01 00:16:46 26 4
gpt4 key购买 nike

我正在尝试为类设置一个不明确的变量。沿着这些线的东西:

<?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";
?>

有没有办法做到这一点?

最佳答案

正如$instance->$property所述($instance->{$property}使其跳出)

如果你真的想把它作为数组索引来访问,实现ArrayAccess接口(interface)并使用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
)

)

)

)

关于php 魔术方法 __set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6398684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com