Как добавить новую переменную-член в PHP? - PullRequest
1 голос
/ 19 ноября 2009

Я хочу сделать что-то вроде:

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

Что почти совпадает с assign в smarty:

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

Как мне это реализовать?

Ответы [ 6 ]

4 голосов
/ 19 ноября 2009
class Name {
   private $values = array()

   function assign($name,$value) {
       $this->values[$name] = $value;
   }
}
1 голос
/ 19 ноября 2009
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() временно извлекает пары ключ-значение из массива как переменные, названные для каждого ключа со значениями, соответствующими значениям массива.

1 голос
/ 19 ноября 2009

Вопрос немного расплывчатый. Если вы хотите сохранить $ value $ 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');

И если путь / к / file.tpl содержит:

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

Вы бы получили такой вывод

Это моя переменная: Мое значение

0 голосов
/ 27 мая 2010
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;
0 голосов
/ 19 ноября 2009

Вы должны создать глобальный класс реестра, чтобы сделать ваши переменные доступными для вашего 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');
0 голосов
/ 19 ноября 2009

Я бы сказал

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