Yo estaba buscando cuándo y con qué resolución de alcance :: se utiliza. Así descubrí que se puede utilizar para llamar la variable / función estática y también para. Pero parece que hay más a él teniendo en cuenta esta respuesta de desbordamiento de pila.
Mi confusión se trata de las dos últimas líneas de código a partir de esta respuesta :
/* This is more tricky
* in the first case, a static call is made because $this is an
* instance of A, so B::dyn() is a method of an incompatible class
*/
echo '$a->dyn():', "\n", $a->callDynamic(), "\n";
/* in this case, an instance call is made because $this is an
* instance of B (despite the fact we are in a method of A), so
* B::dyn() is a method of a compatible class (namely, it's the
* same class as the object's)
*/
echo '$b->dyn():', "\n", $b->callDynamic(), "\n";
La ::
llama en aplicaciones estáticas. Esto es para las clases con propiedades y métodos donde se lo llama estáticos y sin una instancia.
class A {
public static function callMethod(): void {}
}
A::callMethod();
se llamar al método callMethod()
sin tener una instancia.
class A {
public function callMethod(): void {}
}
$a = new A();
$a->callMethod();
llamará callMethod()
a partir de instancia $a
.
Tenga en cuenta, que los métodos estáticos pueden solamente ser llamados sin ejemplo .
explicación adicional
De la respuesta se enlazó, un método se llama de forma dinámica , incluso no se definió. Cuando se utiliza el método de la persona que llama magia , esto es posible.
class A {
public function __call($name, $arg) {
$args = implode(', ', $arg ?? []);
echo "You called {$name} with ({$args})\n";
}
}
Así que ahora puede llamar a cualquier método sin una excepción.
$a = new A();
$a->hello('world');
Usted llamó hola con (mundial)