En PHP, los programas se guardan y luego se ejecutan directamente en el navegador, el script se ejecuta a través de un servidor web y obtenemos el resultado. No compilamos programas PHP manualmente, pero eso no significa que nunca se compilan. El intérprete de PHP lo hace por usted y lo ejecuta. Entonces hay dos fases, primero, tiempo de compilación y segundo tiempo de ejecución. Durante el tiempo de compilación, las variables normales se reemplazan con sus valores, pero las palabras clave estáticas se reemplazan solo en el tiempo de ejecución. Anulando una propiedad en la clase secundaria y creando la instancia de la clase secundaria, para obtener el resultado anulado, el concepto de enlace estático tardío se usa escribiendo la palabra clave estática antes de usar la propiedad. Cada vez que un intérprete de PHP recibe la solicitud para compilar una función. Si ve alguna propiedad estática, luego deja la propiedad pendiente para el tiempo de ejecución y la propiedad obtiene su valor durante el tiempo de ejecución de la función a la que se llama. Esto se denomina enlace estático tardío.
Esta característica de enlace estático tardío se introdujo en PHP 5.3 y superior, las versiones anteriores mostrarán un error fatal.
Los siguientes ejemplos ilustran el enlace estático tardío en PHP:
Ejemplo 1: en el siguiente código, tenemos una clase Auto y su clase secundaria newCar . Tenemos algún problema cada vez que intentamos acceder a la función getOwner() a través del operador de resolución de alcance (sin crear un objeto). Ambas clases tienen la función getCar() pero cada vez que llamamos a la función getOwner() a través de la clase newCar, heredará la función getCar() en la clase Car en lugar de newCar.
- Programa: En este programa no usaremos el enlace estático, usaremos la vieja escuela, luego obtendrá la idea del enlace estático tardío.
<?php
// Car function
class
Car
{
public
static
$name
=
'Tesla'
;
public
static
function
getCar()
{
return
"The car name is : "
. self::
$name
;
}
public
static
function
getOwner()
{
echo
self::getCar();
}
}
class
newCar
extends
Car
{
public
static
function
getCar()
{
return
"The car name is : "
. self::
$name
.
" and owner is Anshu."
;
}
}
Car::getOwner();
echo
"\n"
;
newCar::getOwner();
?>
- Producción:
The car name is : Tesla The car name is : Tesla
- Programa 2: Una cosa que podemos hacer es copiar la función getOwner() de la clase Car a la clase newCar pero se puede hacer para programas pequeños. ¿Qué sucede si su programa contiene de 100 a 1000 funciones? Para resolver esto, se puede usar la palabra clave static en lugar de self. La clase newCar no contiene la función getOwner() pero aun así hereda la función getCar() de newCar . Esto sucedió porque getOwner() está llamando a getCar() en tiempo de ejecución en lugar de en tiempo de compilación. Acceso en tiempo de ejecución de la función getOwner() en la clase Car y no la compilación o el acceso temprano. De esta forma, podemos obtener la función getOwner() ennewCar() clase sin crear un objeto.
<?php
// Car function
class
Car
{
public
static
$name
=
'Tesla'
;
public
static
function
getCar()
{
return
"The car name is : "
. self::
$name
;
}
public
static
function
getOwner()
{
echo
static
::getCar();
}
}
class
newCar
extends
Car
{
public
static
function
getCar()
{
return
"The car name is : "
. self::
$name
.
" and owner is Anshu."
;
}
}
Car::getOwner();
echo
"\n"
;
newCar::getOwner();
?>
- Producción:
The car name is : Tesla The car name is : Tesla and owner is Anshu.
Ejemplo 2: enlace estático tardío en const, funcionará igual que los métodos estáticos, lo que significa cómo se llama. Para const, no tiene por qué ser necesariamente estático.
- Programa:
<?php
class
One
{
const
MY_CONST = false;
public
function
selfConst()
{
return
self::MY_CONST;
}
public
function
staticConst()
{
return
static
::MY_CONST;
}
}
class
Two
extends
One
{
const
MY_CONST = true;
}
$two
=
new
Two();
// prints "no"
echo
$two
->selfConst() ?
'yes'
:
'no'
;
echo
"\n"
;
// prints "yes"
echo
$two
->staticConst() ?
'yes'
:
'no'
;
?>
- Producción:
no yes
¿Dónde usarlo?
- Donde se anula una función y desea mostrar las nuevas propiedades.
- Donde el programa es demasiado grande y no puede escribir la misma función una y otra vez.
Publicación traducida automáticamente
Artículo escrito por AnshuMishra3 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA