2009-11-19 15 views
1

Je veux faire quelque chose comme:Comment ajouter une nouvelle variable membre en PHP?

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

Ce qui est à peu près la même chose que dans assign Smarty:

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

Comment puis-je mettre en œuvre cela?

Répondre

4
class Name { 
    private $values = array() 

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

Je dirais

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

De cette façon, une seule variable peut être associé. – Mask

+0

vous souhaitez affecter un tableau? – RageZ

1

La question est un peu vague. Si vous voulez conserver la valeur de $ de nom $ environ pour une utilisation future que vous pourriez faire quelque chose comme:

class Name { 

    protected $_data= array(); 

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

Ensuite, pour rendre les variables disponibles dans un fichier modèle inclus:

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'); 

Et si le chemin /to/file.tpl contient:

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

vous obtiendrez une sortie comme ce

Ceci est ma variable: Ma valeur

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); 
    } 
} 

L'appel extract() tire temporairement paires clé-valeur d'un tableau à l'existence en tant que variables nommées pour chaque clé avec des valeurs correspondant aux valeurs du tableau.

+0

Ne voulez-vous pas dire '$ this -> _ vars'? – deceze

+0

Pensez-vous que c'est MVC? Je peux voir qu'il sépare View et Logic, mais je ne sais pas Modal et Control.Do you? – Mask

+0

Généralement, lorsque vous obtenez * get *, les données à transmettre à 'assign()' proviennent d'un modèle. Comme aucune donnée n'est utilisée ici, vous ne verrez que des éléments de la vue et du contrôleur. – Amber

0

Vous devez créer une classe mondiale de registre pour rendre vos variables disponibles dans votre fichier 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; 
    } 

} 

Et l'accès comme celui-ci à partir de vos fichiers:

registry::get('my already set value'); 
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; 
Questions connexes