PHP $cette variable
Je suis en train de lire quelques code PHP que je ne pouvais pas comprendre:
class foo {
function select($p1, $dbh=null) {
if ( is_null($dbh) )
$dbh = $this->dbh ;
return;
}
function get() {
return $this->dbh;
}
}
Je ne peux pas trouver $this->dbh ($dbh)
déclaration de la classe. Mes questions sont les suivantes:
-
Quelle est la valeur de
$this->dbh
? -
Est-il une variable locale à la fonction de
select()
? -
Ne
$this
appartiennentclass foo
de données de l'membre? Pourquoi il n'y a pas de déclaration de l'$dbh
dans cette classe?
- Sauf si vous n'avez pas compris le code qui définit
$dbh
pour la classe ou d'une classe, il s'étend, ce code ne fait rien. Ce que @Unsigned dit est vrai: si une propriété est référencée qui n'existe pas, il est silencieusement créé. Dans ce cas, toutefois, ce code renvoie TOUJOURS null. TOUJOURS.$this->dbh
est jamais définie, seulement utilisé pour définir d'autres variables, ce qui signifie que peu importe ce que vous faites,get()
retourne TOUJOURS null. Je pense que vous avez peut-être laissé de côté certains pertinentes du code, ou de la personne qui a écrit cela est absolument fou. - Il est juste un peu de classe, je pense que pour répondre à vos questions, nous devons avoir un peu plus de code, où l'on déclare l'objet de cette classe
Vous devez vous connecter pour publier un commentaire.
PHP n'est pas stricte au sujet de l'obligation de classe déclarations de propriété.
E_STRICT
est activé.NULL
PHP n'est pas stricte de la déclaration. $this->dhp est un membre de la classe. J'ai fait le code suivant pour comprendre le concept:
C'est même comme:
$this->dbh
est.$dbh
est une propriété de l'objet courant.$this
est l'utilisation de l'accès pour les membres de l'objet.$this->dbh
peut être utilisé dans n'importe quelle fonction à l'intérieur de la classe.$dbh
contre$this->dbh
. Elles sont complètement différentes variables. Ce que vous avez dit: >"$dbh
peut être utilisé dans n'importe quelle fonction à l'intérieur de la classe" est en fait mal.$this->dbh
peut être utilisé dans n'importe quelle fonction, si elle a été définie quelque part.$dbh
est une variable locale comme toutes les autres.PHP ne vous force pas à vous déclarer des propriétés de la classe, mais créera pour vous lors du premier accès. Si c'est bon ou mauvais, qu'il en soit, bienvenue à PHP.
Une autre chose à vérifier est que vous n'avez pas d'héritage qui se passe. A votre
$dbh
propriété définie dans une classe parente? Il n'y a rien dans le simple code que vous avez posté, mais je peux imaginer que vous simplifié un peu pour la consommation publique. 🙂Elle aura la valeur par défaut, s'il est affecté d'autre "null"
Il est la propriété de la classe foo, pas la variable locale, de sorte qu'il sera disponible pour toutes les méthodes de la classe foo
Oui, c'est appartenir à la foo membre de données, vous ne voyez pas toute déclaration, car, PHP n'est pas stricte au sujet de l'obligation de classe déclarations de propriété.