Ada*_*dam 12 php variables automation class object
所以例如我有这个代码:
class Object{
public $tedi;
public $bear;
...some other code ...
}
Run Code Online (Sandbox Code Playgroud)
现在您可以看到此类中有公共变量.我想做的是以动态方式制作这些变量,其功能如下:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
那么我应该如何以动态方式创建公共变量呢?
小智 40
$vars = (object)array("tedi"=>"bear");
Run Code Online (Sandbox Code Playgroud)
要么
$vars = new StdClass();
$vars->tedi = "bear";
Run Code Online (Sandbox Code Playgroud)
是的,你可以这样做.
你是非常正确的 - 这应该这样做:
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";
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,这使用变量命名变量,这可以做一些疯狂和危险的事情!
根据评论,像这样创建的成员将是公共的 - 我确信有一种创建受保护/私有变量的方法,但它可能并不简单(例如,您可以通过扩展中的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";
}
}
Run Code Online (Sandbox Code Playgroud)
那么属性将作为$this->var
与$this["var"]
同样,这可能会或可能不适合使用的情况.设置属性的替代方法是$this->offsetSet("VAR", "some value");
.
顺便说一句,变量变量没什么坏处.它们是一种适当的语言构造,就像重用ArrayObject一样.
归档时间: |
|
查看次数: |
54363 次 |
最近记录: |