如何在PHP中添加新的成员变量?

时间:2009-11-19 05:26:34

标签: php smarty

我想做类似的事情:

class Name{
    function assign($name,$value){
    }
}

这与smarty中的assign非常相似:

$smarty->assign('name',$value);
$smarty->display("index.html");

我该如何实现?

6 个答案:

答案 0 :(得分:4)

class Name {
   private $values = array()

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

答案 1 :(得分:1)

问题有点模糊。如果你想保留$ name的$值以备将来使用,你可以做类似的事情:

class Name {

    protected $_data= array();

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

然后在包含的模板文件中使变量可用:

class Templater {

    protected $_data= array();

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

    function render($template_file) {
       extract($this->_data);
       include($template_file);
    }
}

$template= new Templater();
$template->assign('myvariable', 'My Value');
$template->render('path/to/file.tpl');

如果path / to / file.tpl包含:

<html>
<body>
This is my variable: <b><?php echo $myvariable; ?></b>
</body>
</html>

你会得到像这样的输出

  

这是我的变量:我的价值

答案 2 :(得分:1)

class Name{
    private $_vars;
    function __construct() {
        $this->_vars = array();
    }

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

    function display($templatefile) {
        extract($this->_vars);
        include($templatefile);
    }
}

extract()调用临时从数组中拉出键值对,作为为每个键命名的变量,其值与数组值对应。

答案 3 :(得分:0)

我会说

class Name{
    private $_values = array(); // or protected if you prefer
    function assign($name,$value){
       $this->_values[$name] = $value;
    }
}

答案 4 :(得分:0)

您应该创建一个全局注册表类,以使您的变量可用于HTML文件:

class registry
{
     private $data = array();

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

     static function get($value)
     {
           return isset($this->data[$name]) ? $this->data[$name] : false;
     }

}

并从您的文件中访问:

registry::get('my already set value');

答案 5 :(得分:0)

class XY
{

 public function __set($name, $value)
 {
      $this->$name = $value;
 }

 public function __get($value)
 {
       return isset($this->$name) ? $this->$name : false;
 }

}

$xy = new XY();

$xy->username = 'Anton';
$xy->email = 'anton{at}blabla.com';


echo "Your username is: ". $xy->username;
echo "Your Email is: ". $xy->email;