11
votes

Objets de retour dans PHP

Je vois des questions similaires posées mais je semble avoir un problème avec plus de choses de base qu'on leur a été demandé. Comment déclarer une variable en PHP? Mon problème spécifique est une fonction qui lit une table DB et renvoie l'enregistrement (un seul) en tant qu'objet.

class User{
   public $uid;
   public $name;
   public $status;
}

function GetUserInfo($uid)
{
   // Query DB

   $userObj = new User();

   // convert the result into the User object.

   var_dump($userObj);   
   return $userObj;
}

// In another file I call the above function.

....

$newuser = GetUserInfo($uid);

var_dump($newuser);


6 commentaires

Ça devrait aller. Êtes-vous 1000% sûr que vous comparez le droit var_dump () s, c'est-à-dire que l'un à l'intérieur de la fonction se produit vraiment immédiatement avant var_dump ($ newuser) ? Il n'y a pas d'autre endroit où votre fonction est appelée?


Quelle version de php utilisez-vous? On dirait que vous êtes sur PHP4. Veuillez passer à la version 5.3, car quelque chose de moins est des ordures complètes. J'espère sérieusement que vous n'avez pas de clients car si vous écrivez un code PHP4 pour eux ... ils doivent vous voler.


Que voulez-vous dire avec "Var_Dump () ne fonctionne pas"?


Non, je n'utilise pas PHP4.


Désolé gars s'avère qu'il y a une faute de frappe dans mon code et ce n'était pas montrant dans mon IDE. Je devais parcourir les journaux Apache pour voir ça. J'utilise l'Eclipse IDE pour PHP. C'est total BS. Ne montre rien, à l'exception des erreurs spécifiques du langage flagrant.


Donc, histoire drôle. J'avais le même problème que vous avez traversé tout et j'avais le même problème dans mon code. 1 lettre était éteinte dans le nom de la variable. Donc, si quelqu'un d'autre a eu ce numéro, cherchez des fautes de frappe! haha


4 Réponses :


0
votes

Créez d'abord une nouvelle instance de votre classe . Ensuite, utilisez cette instance pour appeler votre fonction et fournir le paramètre $ uid de sorte que votre requête est exécuté comme il shoudl. S'il y a une correspondance dans votre jeu de données, votre userObject sera rempli avec les résultats de la DB.

Personnellement, je préfère utiliser les appels statiques, il rend votre code beaucoup plus lisible et compact.

différence: < / p> xxx

ou xxx

et je vois un étrange } à la ligne 4. Corrigez-moi si Je me trompe, mais je pense qu'il devrait être après la balise } de la fonction GetUserInfo (uid $) .


7 commentaires

Depuis l'échantillon de code ci-dessus, la fonction getUserInfo () n'est pas une méthode sur la classe, c'est une fonction distincte.


J'ai remarqué cela aussi, après avoir posté ma première réponse. Mais alors c'est une mise en œuvre farfelue d'une solution d'OOP pour obtenir un userObject, au moins, à mon avis.


Et je suis à peu près sûr que s'il vient de déplacer l'accolade à la ligne après la fonction GetUserInfo (qui devient alors une méthode), cela devrait fonctionner correctement. P.s. N'oubliez pas d'ajouter le préfixe public devant fonction .


Ben, je simplifiais le code pour le souci de poster. Je comprends que ce n'est pas une bonne implémentation de OOP. J'ai trouvé le problème cependant, c'est beaucoup plus faible que je pensais que je l'ai mentionné ci-dessus. Merci pour votre aide.


Vous êtes les bienvenus;) Je n'étais pas implifeng que vous ne connaissez pas OOP;)


implifieng? Il, il aime l'orthographe encore meilleure.


@ User220201: Ouais, je suis désolé pour la faute de frappe !, @unknown: C'est un vrai régal de devenir non révélé sans commentaire, même si j'ai donné une solution de travail!



12
votes

Utilisation de php5 Il fonctionne:

<pre>
<?php

class User{
   public $uid;
   public $name;
   public $status;
}

function GetUserInfo($uid)
{

   $userObj = new User();
   $userObj->uid=$uid;
   $userObj->name='zaf';
   $userObj->status='guru';
   return $userObj;
}

$newuser = GetUserInfo(1);
var_dump($newuser);

?>
</pre>

object(User)#1 (3) {
  ["uid"]=>
  int(1)
  ["name"]=>
  string(3) "zaf"
  ["status"]=>
  string(4) "guru"
}


0 commentaires

0
votes

Je suis dans le même problème. Cependant, j'utilise 5.6.1. Voici ce que je faisais mal: XXX

Tout dans la méthode de la classe a fonctionné bien, $ OBJ avait des informations lors du retour. Toutefois, les résultats des éléments suivants ont fourni une valeur nulle: xxx

réglage $ obj = null; Dans la méthode de la classe, essayez ... finalement détruit $ obj faire $ myobj null. Enlevé le $ obj = null; et la méthode renvoie les informations appropriées.


0 commentaires

0
votes

Nouvelle STDCLASS (); devrait résoudre le problème.


0 commentaires