2009-08-07 9 views

Respuesta

68

-> se utiliza cuando se hace referencia a una miembro de un objeto.

:: es el Scope Resolution Operator y se utiliza para hacer referencia a un miembro estático de una clase.

Considérese la clase siguiente:

class FooBar { 
    public static function fizz() { 
     echo "Fizz"; 
    } 

    public function buzz() { 
     echo "Buzz"; 
    } 
} 

que llamarían la función buzz() usando ->:

$myFooBar = new FooBar(); 
$myFooBar->buzz(); 

Pero usaría :: a llamar a la functon fizz(), ya que es un miembro estático (una miembro que no requiere una instancia de la clase para llamar):

FooBar::fizz(); 

Asimismo, si bien estamos hablando de la diferencia entre miembros estáticos frente instanciados miembros, no se puede utilizar $this para referirse a la instancia actual dentro miembros estáticos. En su lugar, utiliza self (sin referencia $) que hace referencia a la clase actual, o parent si desea hacer referencia a la clase principal, o si tiene el placer de trabajar con PHP 5.3.0, static (lo que permite la vinculación estática tardía)


La documentación utiliza :: para referirse a una función dentro de una clase como el nombre de la clase en la cabecera no es una instancia de la clase. Aún utilizando el mismo ejemplo, una entrada de documentación referente a la función buzz() usaría el siguiente encabezado:

FooBar::buzz 

Pero a menos que la documentación especifica que es un miembro estático, necesitará utilizar -> en una instancia llamarlo:

$myFooBar = new FooBar(); 
$myFooBar->buzz(); 
+5

Estaba a punto de publicar, pero esto es bastante acertado. En una respuesta corta a Juan, no hay diferencia. Como Andrew afirma que es una convención en el manual de PHP para describir un método de clase como ClassName :: methodName La intención es usar como un objeto, es decir $ name-> commit() a menos que diga lo contrario en la documentación. – simonrjones

+0

Esta respuesta es increíble. cómo hacer FooBar :: fizz() -> seleccionar ("algo") -> donde ("algo"); – TheCrazyProfessor

0

:: accede a la función de clase sin generar ejemplares de un objeto.

5

:: se utiliza para métodos estáticos.

-> se utiliza para el método de un objeto si ya tiene la instancia.

0

El operador -> es para propiedades de objeto.

El operador :: es para las propiedades de clase .

0

en mysqli-> cometer, mysqli es una instancia de MySQLi en mysqli :: commit llamar a un método estático

4

Si tiene una instancia de un objeto, se utiliza -> para hacer referencia a un método dentro de este ejemplo:

$foo = new Foo(); 
$foo->bar(); 

Usando :: llama a un método estático sin tener que crear una instancia del objeto:

Foo::bar(); 

un método estático no puede referirse a un es s instancia actual a través de $this, pero puede referirse a sí mismo (clase actual) usando self.

+0

Llamar a un miembro no estático utilizando el operador de resolución de alcance plantea un E_STRICT en PHP <5.3.0 y un E_WARNING en PHP> = 5.3.0. –

+1

Y 'self' existe para referirse a la clase actual en un contexto estático. No se refiere a una instancia, sino a sí misma: 'clase A {función estática b() {self :: c(); } función estática privada c() {echo 'hello'; }}; ' –

0

mysqli-> commit es una función pública y mysqli :: commit es una función estática, las dos son anotaciones de objetos php de la clase mysqli.

0

por lo general 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.

1

:: especifica un método estático (clase), que es invocable sin instanciar realmente un objeto. -> especifica un método de instancia (objeto) para el que necesita que un objeto instanciado pueda usarse.

Así, por ejemplo, si usted tenía una variable $m que era una instancia de la clase mysqli, que llamarían commit diciendo $m->commit(), o puede llamar a cometer estáticamente diciendo MySQLi::commit()