Diferencia entre self::$bar y static::$bar en PHP

palabra clave self : es una palabra clave de PHP que representa la clase actual y se usa para acceder a variables de clase estáticas o variables estáticas porque estos miembros pertenecen a una clase en lugar del objeto de esa clase.

Ejemplo:

<?php
  
// Declaring parent class
class demo {
  
    public static $bar = 10;
  
    public static function func() {
        echo self::$bar . "\n";
    }
}
  
// Declaring child class
class Child extends demo {
    public static $bar = 20;
  
}
  
// Calling for demo's 
// version of func()
demo::func();
  
// Calling for child's 
// version of func()
Child::func();
  
?>
Producción:

10
10

Puede ver que para ambos casos, el valor de $bar se imprime en la clase de demostración, aunque para la segunda llamada estamos intentando obtener el valor de $bar para la clase secundaria. Esto sucede debido a la palabra clave ‘self’. Self solo se refiere a la versión en tiempo de compilación de $bar o, en términos más simples, se refiere a la versión de la clase en la que reside. De hecho, se considera una limitación de ‘self’ pero se puede solucionar usando ‘static ‘ palabra clave.

Palabra clave estática : esta palabra clave de PHP ayuda a que el concepto de «enlace estático tardío en PHP» aparezca en la imagen. Se utiliza para acceder a la función estática deseada por la clase extendida en tiempo de ejecución.

Ejemplo:

<?php
   
// Declaring parent class
class demo {
   
    public static $bar = 10;
   
    public static function func() {
                   
        // Static in place of self
        echo static::$bar."\n";
    }
}
   
// Declaring child class
class Child extends demo {
    public static $bar = 20;
}
   
// Calling for demo's version of func()
demo::func();
   
// Calling for child's version of func()
Child::func();
   
?>
Producción:

10
20

la palabra clave ‘static’ cubre la limitación que tiene la palabra clave ‘self’ al hacer cumplir el concepto de enlace estático tardío. En este escenario, static le pide al compilador que imprima la versión de la función para la clase que la solicitó. Todo esto sucede en tiempo de ejecución, por lo tanto, el enlace estático tardío es una forma de mostrar polimorfismo en tiempo de ejecución en PHP.

self Vs static: la diferencia más básica entre ellos es que self apunta a la versión de la propiedad de la clase en la que se declara, pero en el caso de static, la propiedad se redeclara en tiempo de ejecución.

Publicación traducida automáticamente

Artículo escrito por vanshikagoyal43 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *