POO, objet rempli mais rien quand je l'affiche

POO, objet rempli mais rien quand je l'affiche - PHP - Programmation

Marsh Posté le 14-04-2009 à 21:34:32    

Bonsoir,
 
J'ai un petit problème avec CodeIgniter mais qui s'apparente à un problème général de POO.
 
Mon objet est déclaré dans une classe dont voici le code :

Code :
  1. <?php
  2. class Mdl_Contact extends Model {
  3.     var $id   = '';
  4. var $societe   = '';
  5. var $secteur   = '';
  6. var $nom   = '';
  7. var $prenom   = '';
  8. var $adresse   = '';
  9. var $code_postal   = '';
  10. var $tel   = '';
  11. var $fax   = '';
  12. var $port   = '';
  13. var $email   = '';
  14. var $societe_technique   = '';
  15. var $nom_technique   = '';
  16. var $prenom_technique   = '';
  17. var $adresse_technique   = '';
  18. var $code_postal_technique   = '';
  19. var $tel_technique   = '';
  20. var $fax_technique   = '';
  21. var $email_technique   = '';
  22.    
  23.     function Mdl_Contact()
  24.     {
  25.         // Call the Model constructor
  26.         parent::Model();
  27.        
  28.        
  29.     }
  30.    
  31. function save() {
  32.        
  33.         $db_array = array(
  34.         "id" => $this->id,
  35.         "societe" => $this->societe,
  36.         "secteur" => $this->secteur,
  37.         "nom" => $this->nom,
  38.         "prenom" => $this->prenom,
  39.         "adresse" => $this->adresse,
  40.         "code_postal" => $this->code_postal,
  41.         "tel" => $this->tel,
  42.         "fax" => $this->fax,
  43.         "port" => $this->port,
  44.         "email" => $this->email,
  45.         "societe_technique" => $this->societe_technique,
  46.         "nom_technique" => $this->nom_technique,
  47.         "prenom_technique" => $this->prenom_technique,
  48.         "adresse_technique" => $this->adresse_technique,
  49.         "code_postal_technique" => $this->code_postal_technique,
  50.         "tel_technique" => $this->tel_technique,
  51.         "fax_technique" => $this->fax_technique,
  52.         "email_technique" => $this->email_technique
  53.        
  54.         );
  55.        
  56.         // If mdl_contacts->contact_id was set in the controller, then we will update an existing record.
  57.         if ($this->id) {
  58.             $this->db->where("id", $this->id);
  59.             $this->db->update("contacts", $db_array);
  60.         }
  61.         // If mdl_contacts->contact_id was not set in the controller, then we will insert a new record.
  62.         else {
  63.             $this->db->insert("contacts", $db_array);
  64.         }
  65.     }
  66.    
  67.    
  68.     function toString(){
  69.    
  70.      $tmp = "<ul>";
  71.    
  72.      foreach(get_class_vars(get_class($this)) as $key=>$value) {
  73.          if($key != "_parent_name" ) {
  74.           $val = $this->$key;
  75.           $tmp .= "<li>".$key." : ".$value."</li>";
  76.          }
  77.     }
  78.     $tmp .= "</ul>";
  79.      echo $tmp;
  80.     }
  81. }
  82. ?>


 
Mon code qui créer l'instance de 'lobjet et le rempli est le suivant :

Code :
  1. // Enregistrement dans la session
  2.   $contact =& new Mdl_Contact();
  3.   $contact->societe = $this->input->post('societe') ;
  4.             $contact->secteur = $this->input->post('secteur') ;
  5.             $contact->nom = $this->input->post('nom') ;
  6.             $contact->prenom = $this->input->post('prenom') ;
  7.             $contact->adresse = $this->input->post('adresse') ;
  8.             $contact->code_postal = $this->input->post('code_postal') ;
  9.             $contact->tel = $this->input->post('tel') ;
  10.         $contact->fax = $this->input->post('fax') ;
  11.             $contact->port = $this->input->post('port') ;
  12.             $contact->email = $this->input->post('email') ;
  13.             $contact->societe_technique = $this->input->post('societe_technique') ;
  14.             $contact->secteur_technique = $this->input->post('secteur_technique') ;
  15.             $contact->nom_technique = $this->input->post('nom_technique') ;
  16.             $contact->prenom_technique = $this->input->post('prenom_technique') ;
  17.         $contact->adresse_technique = $this->input->post('adresse_technique') ;
  18.             $contact->code_postal_technique = $this->input->post('code_postal_technique') ;
  19.             $contact->tel_technique = $this->input->post('tel_technique') ;
  20.             $contact->fax_technique = $this->input->post('fax_technique') ;
  21.             $contact->port_technique = $this->input->post('port_technique') ;
  22.             $contact->email_technique = $this->input->post('email_technique');
  23.             $contact->toString();
  24.   echo "societe : form=".$this->input->post('secteur')." | objet=".$contact->secteur ;


 
Comme vous pouvez le constater j'appel la méthode toString() à la fin des affectations ainsi qu'un echo basique pour vérifier une donnée issue du formulaire et le contenu du contact.
 
Le problème réside dans le fait que la méthode toString() n'affiche aucune valeur issue du formulaire alors que lors du echo les deux affichages fonctionnent parfaitement ?

Citation :

id :
societe :
secteur :
nom :
prenom :
adresse :
code_postal :
tel :
fax :
port :
email :
societe_technique :
nom_technique :
prenom_technique :
adresse_technique :
code_postal_technique :
tel_technique :
fax_technique :
email_technique :
societe : form=qsc | objet=qsc


 
 
Merci d'avance pour votre aide.
 
Louis

Reply

Marsh Posté le 14-04-2009 à 21:34:32   

Reply

Marsh Posté le 15-04-2009 à 08:46:20    

déjà il me semble que la méthode magique est

Code :
  1. __toString()

Est-ce normal qu'il n'y ait pas d'"underscore" :??:

Reply

Marsh Posté le 15-04-2009 à 10:08:52    

deja, tu fais un $obj->toString();

 

ca doit en theorie retourner un string, qu'il faut afficher, mais ca c'est du detail, rien de grave.

 

Que fais tu de $val dans ton tostring ? car tu affiches $value


Message édité par tomsoft le 15-04-2009 à 10:09:49
Reply

Marsh Posté le 15-04-2009 à 10:11:31    

ouais, d'où l'avantage de travailler avec les E_NOTICE :sarcastic:

Reply

Marsh Posté le 15-04-2009 à 10:16:47    

un truc que j'utilise toujours, pour verifier ton objet,  

Code :
  1. <pre>
  2.    <?php var_dump($obj); ?>
  3. </pre>

Reply

Marsh Posté le 15-04-2009 à 18:23:11    

luc@as : effectivement je devrais utiliser cette methode mais je t'avoue que je faisais cela seulement pour une vérification et ne me souvenais plus de cette méthode magique.
 
tomsoft : je n'utilise pas du tout cette méthode pour insérer en base de données et il s'agissait d'un exemple pris sur le net pour l'affichage des attributs d'un objet. Donc je n'utilise pas $val.
De plus j'avais bien essayé le var_dump mais beaucoup d'informations supperflues étaient affichées, avec un print_r() j'arrive à récuperer des infos de ce type :  
 

Code :
  1. [societe] => societe [secteur] => agro [nom] => celton [prenom] => louis [adresse] => 30 rue des burons [code_postal] => 85100 [tel] => 0202020202 [fax] => 0202020202 [port] => 0202020202 [email] => allserv@free.fr ) [mdl_contact] => Mdl_Contact Object *RECURSION* ) [mdl_domaine] => Mdl_Domaine Object *RECURSION* ) [mdl_mutualise] => Mdl_Mutualise Object *RECURSION* ) [mdl_serveur] => Mdl_Serveur Object *RECURSION* ) [secteur_technique] => [port_technique] => )


 
Merci encore pour votre aide.
 
Louis

Reply

Marsh Posté le 16-04-2009 à 22:15:25    

Personne pour m'aider ? :(

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed