2009-11-16 4 views

Répondre

2
class Foo{ 
    function __construct($arr){ 
     foreach($arr as $k => $v) 
      $this->$k = $v; 
    } 
} 

Vous pouvez consulter les constructor/desctructor manual et properties manual.

à noter puisque vous ne définissez pas les propriétés dans la classe tous sont mis à public qui IMHO est un peu dangereux. Je pense qu'il pourrait être possible de réaliser la même chose en utilisant le reflection. Je viens de vérifier plus en profondeur la réflexion et ce n'est pas possible (avec PHP5), car il serait logique de pouvoir le faire à partir de la réflexion qu'il pourrait venir avec PHP6.

échantillon complet

<?php 
class Foo{ 
    function __construct($arr){ 
     foreach($arr as $k => $v) 
      $this->$k = $v; 
    } 

    function getBar(){ 
     return $this->bar; 
    } 
} 

$bar = new Foo(array(
    'bar' => 'bar', 
    'foo' => 'foo' 
) 
); 

var_dump($bar->bar); 
?> 
+0

Je ne suis pas sûr s'il veut dire cela. – DarthVader

+0

vous avez raison j'ai édité mais je pense qu'il y a une fonction pour le faire. Je cherche maintenant – RageZ

+0

$ this -> $ k = $ v serait mort. – DarthVader

0

Oui, vous pouvez le faire. sur le dessus de ma tête

public function __constructor($data){ 
    foreach($data as $k=>$v){ 
    $this->{$k} = $v; 
    } 
} 

Cela devrait le faire, et bien sûr vous devez définir les champs mathématiques. Je ne sais pas trop si c'est {$ k} ou $ {k} ou $ {$ k} mais l'un ou l'autre devrait fonctionner.

0

Vous pouvez certainement faire cela, comme décrit ci-dessus RageZ, mais je ne pense pas que je recommande de le faire. Cela crée un "contrat" ​​trop lâche entre les utilisateurs de cette classe, c'est-à-dire que personne ne sait vraiment quelles sont les propriétés de la classe. Au lieu de définir les propriétés à la volée, je parie que vous avez un ensemble prédéfini de "jeux de propriétés d'objets" qui pourraient à leur tour définir une hiérarchie de classes.

Ainsi, au lieu de faire

  • si je reçois un tableau avec "a = 2 et b = 3", créez objet avec obj- $> a = 3 et $ obj-b = 3
  • si je reçois un tableau avec "c = 5", créer un objet avec obj- $> c = 5

Pour ce faire:

  • définir une classe pour MyObjectOfTypeOne, qui a des propriétés $ a et $ b
  • définir une classe pour MyObjectOfTypeTwo qui a la propriété $ c

Ensuite, utilisez le modèle d'usine pour générer le type d'objet en fonction sur les paramètres transmis à la méthode d'usine statique.

Questions connexes