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?
PHP n'est pas strict quant à l'exigence de déclarations de propriétés de classe.
E_STRICT
est autorisé.NULL
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;
}
}
$this->dbh
est.$dbh
est une propriété de l'objet courant. $this
est utilisé pour accéder aux membres de l'objet courant.$this->dbh
peut être utilisé dans n'importe quelle fonction de la classe.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.
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. :-)
class foo {
function select($p1, $dbh=null) {
if ( is_null($dbh) )
$this->dbh = $dbh ;
return;
}
function get() {
return $this->dbh;
}
}