我想在名称未知的类中声明一个变量
class Example {
function newVar($name, $value) {
$this->$name = $value;
}
}
我想以那种方式使用
$c = new Example();
$c->newVar('MyVariableName', "This is my Value");
echo($c->MyVariableName);
重要的是,我不知道变量的名称。所以我不能在课堂上加public $MyVariable
。
这有可能吗?如果是,我可以使用不同的范围(private
,protected
,public
)执行此操作吗?
答案 0 :(得分:1)
如果我正确理解了这一点,你可以使用键值数组
稍微调整一下}
/**
* @param string $handle Name of the item. Should be unique.
* @param bool $recursion Internal flag that calling function was called recursively.
* @param mixed $group Group level.
* @return bool Not already in the group or a lower group
*/
public function set_group( $handle, $recursion, $group = false ) {
if ( $this->registered[$handle]->args === 1 )
$grp = 1;
else
$grp = (int) $this->get_data( $handle, 'group' );
if ( false !== $group && $grp > $group )
$grp = $group;
return parent::set_group( $handle, $recursion, $grp );
您也可以使用受保护,而不是使用私有。
答案 1 :(得分:1)
你应该使用magic methods
__get
和__set
(不检查示例):
class Example {
private $data = [];
function newVar($name, $value) {
$this->data[$name] = $value;
}
public function __get($property) {
return $this->data[$property];
}
public function __set($property, $value) {
$this->data[$property] = $value;
}
}
$c = new Example();
$c->newVar('MyVariableName', "This is my Value");
echo($c->MyVariableName);
// This is my Value
$c->MyVariableName = "New value";
echo($c->MyVariableName);
// New value
答案 2 :(得分:0)
你正在寻找神奇的召唤。在PHP中,您可以使用__call()
函数来执行此类操作。看看这里:http://www.garfieldtech.com/blog/magical-php-call
脱离我的头顶,像是
function __call($vari, $args){
if(isset($this->$vari){
$return = $this->$vari;
}else{
$return = "Nothing set with that name";
}
}
这也适用于私人,受保护和公共。也可以用它来调用类
中所需的方法