multidimensional - in array php
PHP $ esta variable (6)
Estoy leyendo un código PHP que no pude entender:
class foo {
function select($p1, $dbh=null) {
if ( is_null($dbh) )
$dbh = $this->dbh ;
return;
}
function get() {
return $this->dbh;
}
}
No puedo encontrar la declaración $this->dbh ($dbh)
de la clase. Mis preguntas son:
¿Cuál es el valor de
$this->dbh
?¿Es una variable local para la función
select()
?¿
$this
pertenece el miembro de datos declass foo
? ¿Por qué no hay una declaración para$dbh
en esta clase?
¿Cuál es el valor de $ this-> dbh
Tendrá el valor predeterminado, si se le asigna else "null"
¿Es una variable local para la función select ()? Si es así, ¿por qué la función get () puede usar esta variable?
Es propiedad de la clase foo, no de la variable local, por lo que estará disponible para todos los métodos de la clase foo
¿Le pertenece el miembro de datos de la clase Foo? Si es así, ¿por qué no hay una declaración para $ dbh en esta clase?
Sí, pertenece al miembro de datos de foo, no ve ninguna declaración porque, PHP no es estricto sobre la exigencia de declaraciones de propiedades de clase.
- Con el código que ha publicado, no puede saber cuáles son los valores de
$this->dbh
. -
$dbh
es una propiedad del objeto actual.$this
es uso para acceder a los miembros del objeto actual. - Como esta variable se define fuera de cualquier función, es una variable que pertenece a la clase y no a una función específica. Debido a esto,
$this->dbh
se puede usar en cualquier función dentro de la clase. - PHP no requiere definir cada variable que usa.
PHP no es estricto para la declaración. $ this-> dbh es un miembro de la clase. Hice el siguiente código para entender el concepto:
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;
}
}
Es lo mismo 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;
}
}
PHP no es estricto sobre la exigencia de declaraciones de propiedades de clase.
- Tras la asignación , la propiedad se crea en silencio.
- La lectura desde una propiedad inexistente genera un Aviso si
E_STRICT
está habilitado. - El valor predeterminado para cualquier propiedad indefinida es
NULL
PHP no lo obliga a declarar sus propiedades de clase, sino que las creará cuando lo acceda por primera vez. Si esto es bueno o malo, sea como sea, bienvenido a PHP.
Otra cosa que debes verificar es que no tienes herencia. ¿Fue su propiedad $dbh
definida en una clase para padres? No hay nada en el código simple que publicaste, pero me imagino que simplificaste un poco para el consumo público. :-)
class foo {
function select($p1, $dbh=null) {
if ( is_null($dbh) )
$this->dbh = $dbh ;
return;
}
function get() {
return $this->dbh;
}
}