web-dev-qa-db-fra.com

PHP $ cette variable

Je lis du 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 trouve pas la déclaration $this->dbh ($dbh) dans la classe. Mes questions sont:

  • Quelle est la valeur de $this->dbh?

  • Est-ce une variable locale pour la fonction select()?

  • $this Appartient-il au membre de données de class foo? Pourquoi n'y a-t-il pas de déclaration pour $dbh Dans cette classe?

26
wordpressquestion

PHP n'est pas strict quant à l'exigence de déclarations de propriétés de classe.

  • Sur affectation, la propriété est créée en silence.
  • Lecture de une propriété inexistante génère un avis si E_STRICT est autorisé.
  • La valeur par défaut de toute propriété non définie est NULL
18
Unsigned

PHP n'est pas strict pour la déclaration. $ this-> dbh est un membre de la classe. J'ai fait le code suivant pour comprendre le concept:

class foo {

 function foo(){
     $this->dbh = "initial value"; 
 }

 function select($p1, $dbh=null) {
    if ( is_null($dbh) )
        $dbh = $this->dbh ; 
    return; 
 }

 function get() {
     return $this->dbh; 
 }

}

C'est la même chose que:

class foo {
  var $dbh = "initial value"; 

  function select($p1, $dbh=null) {
    if ( is_null($dbh) )
       $dbh = $this->dbh ; 
    return; 
  }

  function get() {
     return $this->dbh; 
  }

}
22
wordpressquestion
  1. Avec le code que vous avez publié, vous ne pouvez pas savoir quelles sont les valeurs de $this->dbh est.
  2. $dbh est une propriété de l'objet courant. $this est utilisé pour accéder aux membres de l'objet courant.
  3. Puisque cette variable est définie en dehors de toute fonction, est une variable qui appartient à la classe et non à une fonction spécifique. À cause de ce, $this->dbh peut être utilisé dans n'importe quelle fonction de la classe.
  4. PHP n'a pas besoin de définir toutes les variables que vous utilisez.
2
EmCo

Quelle est la valeur de $ this-> dbh

Il aura la valeur par défaut, s'il est affecté autrement "null"

Est-ce une variable locale pour la fonction select ()? Si c'est le cas, alors pourquoi la fonction get () peut utiliser cette variable?

C'est la propriété de la classe foo, pas la variable locale, donc elle sera disponible pour toutes les méthodes de la classe foo

Appartient-il au membre de données de la classe foo? Si c'est le cas, pourquoi il n'y a pas de déclaration pour $ dbh dans cette classe?

Oui, il appartient au membre de données de foo, vous ne voyez aucune déclaration car, PHP n'est pas strict quant à l'exigence de déclarations de propriétés de classe.

1
Chetan Sharma

PHP ne vous oblige pas à déclarer vos propriétés de classe mais les créera pour vous lors de votre premier accès. Que ce soit bon ou mauvais, quoi qu'il en soit, bienvenue dans PHP.

Une autre chose à vérifier est que vous n'avez pas d'héritage. Était votre $dbh propriété définie dans une classe parente? Il n'y a rien dans le code simple que vous avez publié, mais je peux imaginer que vous avez simplifié un peu pour la consommation publique. :-)

1
Icode4food
class foo {
  function select($p1, $dbh=null) {
    if ( is_null($dbh) )
        $this->dbh = $dbh ; 
    return; 
  }

  function get() {
    return $this->dbh; 
  }
}
0
Pritesh Loke