La comprensión de un artículo sobre resolución de alcance en PHP

Dancy Corazón:

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";
Markus Zeller:

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)

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=347463&siteId=1
Recomendado
Clasificación