mysqli_query - Diferencia entre "->" y "::" en PHP MySQLi OOP
php mysqli example (9)
¿Alguien puede decir la diferencia entre mysqli->commit
y mysqli::commit
?
El encabezado en esta página es mysqli::commit
, pero en los ejemplos usan mysqli->commit
.
:: accede a la función de clase sin instanciar un objeto.
El operador ->
es para las propiedades del objeto .
El operador ::
es para propiedades de clase .
Si tiene una instancia de un objeto, usa -> para referirse a un método dentro de esta instancia:
$foo = new Foo();
$foo->bar();
Using :: llama a un método estático sin tener que crear una instancia del objeto:
Foo::bar();
Un método estático no puede hacer referencia a una instancia actual a través de $this
, pero puede referirse a sí mismo (clase actual) usando self
.
en mysqli-> commit, mysqli es una instancia de MySQLi en mysqli :: commit llama a un método estático
mysqli-> commit es una función pública y mysqli :: commit es una función estática; las dos son notaciones de objeto php de la clase mysqli.
usualmente en la documentación de php.net :: significa que esta clase tiene ese método. Para un uso práctico, debe seguir el ejemplo, use el -> sintax.
->
se usa cuando se refiere a un miembro de un objeto.
::
es el operador de resolución de alcance y se utiliza para referirse a un miembro estático de una clase.
Considera la siguiente clase:
class FooBar {
public static function fizz() {
echo "Fizz";
}
public function buzz() {
echo "Buzz";
}
}
Llamarías a la función buzz()
usando ->
:
$myFooBar = new FooBar();
$myFooBar->buzz();
Pero usaría ::
para llamar al functon fizz()
, ya que es un miembro estático (un miembro que no requiere una instancia de la clase para llamar):
FooBar::fizz();
Además, aunque estamos hablando de la diferencia entre los miembros estáticos frente a los miembros instanciados , no puede usar $this
para referirse a la instancia actual dentro de los miembros estáticos . En self
lugar, usa self
(sin encabezado $
) que se refiere a la clase actual, o self si desea hacer referencia a la clase padre, o si tiene el placer de trabajar con PHP 5.3.0, static
(que permite la vinculación estática tardía) )
La documentación usa ::
para referirse a una función dentro de una clase ya que el nombre de la clase en el encabezado no es una instancia de la clase. Aún utilizando el mismo ejemplo, una entrada de documentación que hace referencia a la función buzz()
usaría el siguiente encabezado:
FooBar::buzz
Pero a menos que la documentación especifique que es un miembro estático, deberá usar ->
en una instancia para llamarlo:
$myFooBar = new FooBar();
$myFooBar->buzz();
::
especifica un método estático (de clase), que se puede llamar sin realmente instanciar un objeto. ->
especifica un método de instancia (objeto), para el cual necesita que un objeto instanciado pueda usar.
Entonces, por ejemplo, si tuviera una variable $m
que era una instancia de la clase mysqli
, llamaría a commit
diciendo $m->commit()
, o podría llamar a commit estáticamente diciendo MySQLi::commit()
::
se usa para métodos estáticos .
->
se usa para el método de un objeto si ya tiene la instancia.