php在函数内声明公共变量

时间:2015-09-15 21:59:55

标签: php

我想在名称未知的类中声明一个变量

class Example {
    function newVar($name, $value) {
        $this->$name = $value;
    }
}

我想以那种方式使用

$c = new Example();
$c->newVar('MyVariableName', "This is my Value");
echo($c->MyVariableName);

重要的是,我不知道变量的名称。所以我不能在课堂上加public $MyVariable

这有可能吗?如果是,我可以使用不同的范围(privateprotectedpublic)执行此操作吗?

3 个答案:

答案 0 :(得分:1)

如果我正确理解了这一点,你可以使用键值数组

稍微调整一下
}

/**
 * @param string $handle    Name of the item. Should be unique.
 * @param bool   $recursion Internal flag that calling function was called recursively.
 * @param mixed  $group     Group level.
 * @return bool Not already in the group or a lower group
 */
public function set_group( $handle, $recursion, $group = false ) {
    if ( $this->registered[$handle]->args === 1 )
        $grp = 1;
    else
        $grp = (int) $this->get_data( $handle, 'group' );

    if ( false !== $group && $grp > $group )
        $grp = $group;

    return parent::set_group( $handle, $recursion, $grp );

您也可以使用受保护,而不是使用私有。

答案 1 :(得分:1)

你应该使用magic methods __get__set(不检查示例):

class Example { 
   private $data = [];

   function newVar($name, $value) {
      $this->data[$name] = $value;
   }

   public function __get($property) {
        return $this->data[$property];
   }

   public function __set($property, $value) {
        $this->data[$property] = $value;
   }       
 }


$c = new Example();
$c->newVar('MyVariableName', "This is my Value");
echo($c->MyVariableName); 
// This is my Value

$c->MyVariableName = "New value";
echo($c->MyVariableName);
// New value

请参阅http://php.net/manual/en/language.oop5.magic.php

答案 2 :(得分:0)

你正在寻找神奇的召唤。在PHP中,您可以使用__call()函数来执行此类操作。看看这里:http://www.garfieldtech.com/blog/magical-php-call

脱离我的头顶,像是

function __call($vari, $args){
    if(isset($this->$vari){
        $return = $this->$vari;
    }else{
        $return = "Nothing set with that name";
    }
}

这也适用于私人,受保护和公共。也可以用它来调用类

中所需的方法