变量名为$ this->值?

时间:2011-07-11 10:06:53

标签: php oop class variables foreach

我目前正在使用PHP开发我的类。 我有一个包含值的数组,我想使用数组fieldname作为$ this引用。让我告诉你我得到了什么:

<?php
class Server {    
    private $playlist;
    private $mp3;
    private static $ressourceFolder;
    private static $sudoUser;

在我的数组中它包含:

  array(6) {
    ["playlist"]=>
    int(8002)
    ["mp3"]=>
    int(1024)
    ["ressourceFolder"]=>
    bool(true)
    ["sudoUser"]=>
    bool(true)
  }

所以我想在我的foreach中使用一些东西来获取数组字段的值到类全局变量中,数组fieldname与变量相同所以这'应该'工作,但它不会:(

foreach($ressourceArray as $ressourceField=>$ressourceValue) {    
    $this->$ressourceField = $ressourceValue;
}

如果有人能告诉我为什么这样做不起作用以及如何让这个“可行”,我真的很感激......

提前致谢!

3 个答案:

答案 0 :(得分:2)

确实有效,请参阅Demo

<?php

$array = array("playlist"=> 8002, "mp3"=>1024);

class Mix {
   public function __construct($array) {
    foreach($array as $key => $value) {
        $this->$key = $value;
      }
   }
}

$class = new Mix($array);
var_dump($class);

它将根据数组的键/值对将新的公共成员分配给对象$this

处理数组中错误的命名键

如果键包含的值不是有效的变量名,那么稍后访问属性({property-name})可能并非易事,请参阅PHP curly brace syntax for member variable

在添加之前将数组转换为对象将有助于防止那些完全无效的键名称出现致命错误:

$object = (object) $array;
# iterate over object instead of array:
foreach($object as $key => $value) {
  $this->$key = $value;
}

这些键只是由演员放弃。

答案 1 :(得分:0)

您可以使用魔术方法__set__get。请参阅:http://php.net/manual/en/language.oop5.magic.php

答案 2 :(得分:0)

  

在我的数组中它包含:

什么阵列?这看起来像是类的实例的数组转储。

  

进入类全局变量

什么是全局类变量?类不是变量。变量可以包含对象或类名的引用。

假设您想要遍历对象的属性,并且

$ressourceArray = new Server();

代码将按预期工作。

如果循环在类方法中,那么循环应该是....

foreach($this as $ressourceField=>$ressourceValue) {    
   $this->$ressourceField = $ressourceValue;
}

如果您的意思是尝试从数组初始化对象属性...

class Server {
...
function setValues($ressourceArray)
{
   foreach($ressourceArray as $ressourceField=>$ressourceValue) {    
      $this->$ressourceField = $ressourceValue;
   }
}

(顺便说一句,'资源'中只有一个人')