PHP:如何创建对象变量?
问题描述:
因此,例如,我有这样的代码:PHP:如何创建对象变量?
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;
}
}
所以我应该如何创建一个动态的方式公共变量?
答
是的,你可以做到这一点。
你是非常正确的 - 这应该这样做:
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 )。
答
作为替代方案,您还可以从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");
。
顺便说一句,变量变量没有什么坏处。它们是一个合适的语言结构,就像重用ArrayObject一样。
答
$vars = (object)array("tedi"=>"bear");
或
$vars = new StdClass();
$vars->tedi = "bear";
什么是你的问题? – 2010-12-05 10:29:27
对不起@Pekka,我虽然很清楚,但我把它附加到结尾:) – Adam 2010-12-05 10:30:43
出于好奇,你为什么要这样做? – aib 2010-12-05 12:24:02