【问题标题】:How to create a dynamic property in a class?如何在类中创建动态属性?
【发布时间】:2013-08-06 08:42:56
【问题描述】:

我需要在一个类中创建一个名为“aip-aup”的属性,但我无法让它工作。

首先尝试将其与属性定义放在一起。不幸的是,括号中的属性定义是不允许的。

这失败了(在__construct()):

$this->${'aip-aup'} = array();

给出错误“未定义的变量'aip-aup'”。

这也是(在__set 方法中):

$this->${'aip-aup'}[$property] = $value;

还尝试创建自定义辅助方法,但什么也没做:

$this->createProperty('aip-aup', array());

这里有什么帮助吗?

该属性必须是公开的,所以应该可行?

【问题讨论】:

  • 这违背了 OOP 实践。由于破折号,“aip-aup”也是一个糟糕的属性名称。
  • 我想要我的连字符 =/ 主要也是探索 PHP 的限制和可能性。
  • $this->{'aip-aup'} = array();
  • 这些类型的动态通常会实现魔术 getter 和 setter,你有什么理由不能在这里做同样的事情?
  • @MarkBaker Lol,我在括号前面有一个美元符号。起初我以为你的回复是多余的,但仔细观察后,我意识到它是多么简单和精彩。结案。谢谢。

标签: php oop dynamic-properties


【解决方案1】:

如果你需要做这样的事情,那么你做错了什么,改变你的想法比尝试破解 PHP 是明智的。

但如果你必须这样做,你可以试试这个:

class Test {
    public $variable = array('foo'=>'bar');

public function __get($name){
    if ($name == 'aip-aup'){
        return $this->variable;
        }
    }
}   

$test = new Test();
$func = 'aip-aup';
$yourArray = $test->$func;
echo $yourArray['foo'];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-08
    • 2019-05-02
    • 2010-10-31
    • 2012-04-08
    • 1970-01-01
    • 2018-07-03
    • 2012-02-01
    相关资源
    最近更新 更多