query mysqli_query example ejemplo consulta php mysql oop mysqli

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.