例如,我有这个代码:
class Object{
public $tedi;
public $bear;
...some other code ...
}
现在您可以看到此类中有公共变量。我想做的是以动态方式制作这些变量,其功能类似于:
private function create_object_vars(){
// The Array what contains the variables
$vars = array("tedi", "bear");
foreach($vars as $var){
// Push the variables to the Object as Public
public $this->$var;
}
}
那么我应该如何以动态的方式创建公共变量呢?
答案 0 :(得分:37)
$vars = (object)array("tedi"=>"bear");
或
$vars = new StdClass();
$vars->tedi = "bear";
答案 1 :(得分:7)
是的,你可以这样做。
你非常正确 - 这应该这样做:
private function create_object_vars(){
// The Array of names of variables we want to create
$vars = array("tedi", "bear");
foreach($vars as $var){
// Push the variables to the Object as Public
$this->$var = "value to store";
}
}
请注意,这会使用variable variable naming,这可以做一些疯狂和危险的事情!
根据评论,像这样创建的成员将是公共的 - 我确信有一种创建受保护/私有变量的方法,但它可能并不简单(例如,您可以通过扩展中的C Zend API来实现)
答案 2 :(得分:5)
另外,您也可以从ArrayObject
派生您的对象。因此它继承了数组行为和一些使注入属性更容易的方法。
class YourObject extends ArrayObject {
function __construct() {
parent::__construct(array(), ArrayObject::PROPS_AS_ARRAY);
}
function create_object_vars() {
foreach ($vars as $var) {
$this[$var] = "some value";
}
}
属性同样可用作$this->var
和$this["var"]
,这可能与否适用于用例。设置属性的替代方法是$this->offsetSet("VAR", "some value");
。