2009-05-18 4 views
1

Par exemple, si disons que j'ai une base de données d'utilisateurs. J'ai une classe qui obtient des informations à partir de la base de données sur ces utilisateurs.Rendre l'objet PHP effectuer différentes actions en fonction du nom de la variable

Je veux faire la classe « auto conscience » de son propre nom, comme celui-ci:

<?php 

class UserData { 

//[code that fetches the ID number from the variable name, and queries the database for info] 

} 

$user24 = new UserData; 
echo 'Welcome, '.$user24->name.'!'; 

?> 

Ce code, idéalement, quelque chose de sortie comme « Bienvenue, Bob! », Et changerait en fonction ce que je l'ai nommé. Est-ce possible?

Répondre

3

Même si c'est possible (je ne pense pas), vous ne devriez pas. D'autres verraient juste beaucoup de magie et il serait difficile de déboguer. Respectez les normes et les idées/modèles connus chaque fois que cela est possible.

Pourquoi ne voulez-vous pas utiliser:

$user = new UserData(24); 

Ou encore mieux (parce que vous ne devriez pas faire des opérations de blocage dans le constructeur):

$user = UserData::getById(24); 
+0

Le deuxième morceau de code ne fonctionnerait pas en PHP. –

+0

Ok, j'ai corrigé la syntaxe d'appel statique. – viraptor

+0

Merci, je ne savais pas que vous pouviez passer des arguments à la fonction __construct() comme ça. –

6

Puisqu'un objet donné peut avoir plusieurs noms, ceci n'est pas une technique généralement valide dans les langages de programmation modernes. Par exemple, en supposant que l'utilisateur 25 ait un nom différent de celui de l'utilisateur 24, que voulez-vous que le code suivant imprime?

$user24 = new UserData; 
echo 'Welcome, '.$user24->name.'!'; 
$user25 = $user24; 
echo 'Welcome, '.$user25->name.'!'; 

Non seulement cela, mais vous pouvez avoir des objets sans nom:

echo 'Welcome, '.(new UserData)->name.'!'; 

Une mise en œuvre plus typique aurait le constructeur de l'objet prend un paramètre qui lui indique quel utilisateur que vous avez affaire, comme ceci:

$user = new UserData(24); 
echo 'Welcome, '.$user->name.'!'; 
1

Une valeur (par exemple la relation d'un objet) avec son nom de variable est un-à-plusieurs - c'est-à-dire qu'une valeur peut avoir plusieurs noms, où chacun d'entre eux est une référence à la même valeur. Il peut même ne pas avoir de nom du tout, c'est-à-dire qu'il pourrait s'agir d'une expression (une nouvelle expression, par exemple, renvoie un objet). Par conséquent, il n'est pas possible de trouver "le" nom d'une valeur par programmation. Une valeur peut avoir plusieurs noms ou aucun nom.

Questions connexes