PHP tiene una palabra clave static
bien conocida que se usa ampliamente en PHP orientado a objetos para definir métodos y propiedades estáticos, pero se debe tener en cuenta que static
también se puede usar dentro de funciones para definir variables estáticas.
¿Qué es 'variable estática'?
Variable estática difiere de la variable ordinaria definido en el alcance de la función en caso de que no lo hace perder valor cuando la ejecución del programa abandona este ámbito. Consideremos el siguiente ejemplo del uso de variables estáticas:
function countSheep($num) {
static $counter = 0;
$counter += $num;
echo "$counter sheep jumped over fence";
}
countSheep(1);
countSheep(2);
countSheep(3);
Resultado:
1 sheep jumped over fence
3 sheep jumped over fence
6 sheep jumped over fence
Si hubiéramos definido $counter
sin static
continuación, cada vez que el valor eco sería el mismo que $num
parámetro pasado a la función . Usar static
permite construir este contador simple sin solución adicional.
Las variables estáticas casos de uso
- Para almacenar valores entre llamadas consiguientes para funcionar.
- para almacenar valores entre llamadas recursivas cuando no hay manera (o ninguna propósito) para pasarlos como params.
- para almacenar en caché el valor que normalmente es mejor para recuperar una vez. Para el ejemplo , resultado de leer un archivo inmutable en el servidor. existe
trucos
Variable estática sólo en un ámbito de función local. No puede ser visitada fuera de la función se ha definido. Por lo tanto es posible que estar seguro de que mantendrá su valor sin cambios hasta la siguiente llamada a esa función.
La variable estática solo se puede definir como una expresión escalar o escalar (desde PHP 5.6). Asignar otros valores que inevitablemente conduce a un fracaso, al menos en el momento de escribir este artículo. obstante que son capaces de hacerlo sólo en la siguiente línea de código:
function countSheep($num) {
static $counter = 0;
$counter += sqrt($num);//imagine we need to take root of our sheep each time
echo "$counter sheep jumped over fence";
}
Resultado:
2 sheep jumped over fence
5 sheep jumped over fence
9 sheep jumped over fence
función estática es un poco 'compartida' entre los métodos de los objetos de la misma clase . Es fácil de entender al ver el siguiente ejemplo:
class SomeClass {
public function foo() {
static $x = 0;
echo ++$x;
}
}
$object1 = new SomeClass;
$object2 = new SomeClass;
$object1->foo(); // 1
$object2->foo(); // 2 oops, $object2 uses the same static $x as $object1
$object1->foo(); // 3 now $object1 increments $x
$object2->foo(); // 4 and now his twin brother
Esto solo funciona con objetos de la misma clase. Si los objetos son de diferentes clases (incluso se extienden entre sí), el comportamiento de vars estáticos será el esperado.
¿La variable estática es la única manera de mantener los valores entre las llamadas a una función?
Otra forma de mantener los valores entre las llamadas a funciones es utilizar cierres. Los cierres se introdujeron en PHP 5.3. En dos palabras, le permiten limitar el acceso a un conjunto de variables dentro de un ámbito de función a otra función anónima que será la única forma de acceder a ellas. Estar en variables de cierre puede imitar (más o menos exitosamente) conceptos de OOP como 'constantes de clase' (si se aprobaron en el cierre por valor) o 'propiedades privadas' (si se pasan por referencia) en la programación estructurada.
Este último realmente permite utilizar cierres en lugar de variables estáticas. Qué usar siempre depende del desarrollador decidir, pero se debe mencionar que las variables estáticas son definitivamente útiles cuando se trabaja con recursiones y merecen ser notadas por los desarrolladores.
Si esto es tarea, etiquételo como tal. –
No creo que sea su tarea, algunas personas simplemente nunca han usado variables estáticas en PHP (especialmente si se usa para programación de procedimiento directa) –
¿Cuál es el recuento ++ $; haciendo allí? –