Espacios de nombres
El mayor cambio en PHP 5.3 son, sin duda, los espacios de nombres (antes había preguntas frecuentes sobre espacios de nombres de PHP relacionados). Esto aporta muchos beneficios a los desarrolladores de PHP y también se ha resuelto el problema de los nombres de funciones, ampliamente criticado.
El código es más claro.
El código común anterior a 5.3 requiere un prefijo personalizado para distinguir los nombres de funciones y clases.
CÓDIGO
DE TEXTO
SIMPLE:function MY_wrapper() {}
clase MY_DB { }
definir('MY_CONN_STR', '');
MI_envoltorio();
nuevo MI_DB();
MI_CONN_STR;
Después de usar espacios de nombres, el código parece más limpio.
CÓDIGO
DE TEXTO SIMPLE
:espacio de nombres MI;
contenedor de función() {}
clase BD { }
constante CONN_STR = '';
usa MI COMO MI;
envoltura();
nueva base de datos();
CONN_STR;
Múltiples espacios de nombres definidos en un archivo
¿Qué se debe hacer si se definen varios espacios de nombres en un archivo?
CÓDIGO
DE TEXTO SIMPLE
:espacio de nombres LIB;
clase MySQL {}
clase SQLite {}
$b = nuevo SQLite();
espacio de nombres LIB_EXTRA;
clase MScrypt {}
$a = nuevo MScrypt();
var_dump(
get_class($a),
obtener_clase($b)
);
El resultado del código anterior es:
CÓDIGO
DE TEXTO SIMPLE
:cadena(18)"LIB_EXTRA::MScrypt"
cadena(11)"LIB::SQLite"
PHP es un lenguaje de interpretación y ejecución y los resultados anteriores son razonables.
prioridad del espacio de nombres
Las funciones, clases y constantes definidas en el espacio de nombres tienen prioridad, seguidas de las globales.
CÓDIGO
DE TEXTO SIMPLE
:espacio de nombres foo;
función strlen($foo) {retorno htmlentities($foo);
echo strlen("prueba"); // prueba
echo ::strlen("prueba"); // 4
echo namespace::strlen("prueba"); // prueba
La amistad entre el espacio de nombres y la carga automática.
La carga automática analizará la ubicación del archivo de clase según el nombre del espacio de nombres y el nombre de la clase. La carga automática se activará solo cuando la definición de clase no se encuentre en el espacio de nombres y el alcance global definido en el espacio de nombres no se llamará automáticamente.
TEXTO SENCILLO
CÓDIGO:
función __autoload($var) { var_dump($var } // LIB::foo);
requiere "./ns.php";
<?php
espacio de nombres LIB;
nuevo fo();
*/
espacio de nombres algunos accesorios
DE TEXTO SIMPLE
:
espacio de nombres realmente::largo::sin sentido::detallado::ns;
__NAMESPACE__; // Nueva constante mágica que representa el nombre del espacio de nombres actual
clase a{}
get_class(new a()); // realmente::largo::sin sentido::detallado::ns::a
use realmente::largo::sin sentido::verbose::ns::a AS b;// Haga referencia a una clase del espacio de nombres Nota: El contenido aquí está extraído de las diapositivas de Introducción a PHP 5.3 en formato pdf y no se repetirá más adelante.
Mejoras de rendimiento
El rendimiento general de php 5.3 ha mejorado entre un 5 y un 15 %
y md5() es entre un 10 y un 15 % más rápido.
Mejor implementación de pila en el motor.
Constantes movidas a memoria de solo lectura
Mejora del proceso de manejo de excepciones (simplificación, menos códigos de operación)
(requerir/incluir)_una vez mejorada, eliminar duplicados abiertos
Tamaño binario más pequeño y tamaño de inicio con gcc4
Nueva característica de idioma__DIR__
Antes de 5.3, para obtener el directorio del script actual, se requería una llamada de función
CÓDIGO
DE TEXTO SIMPLE
:echo dirname(__FILE__);
En 5.3, sólo se necesita una constante mágica __DIR__.
CÓDIGO
DE TEXTO SIMPLE
:echo __DIR__; // >= PHP 5.3
?:Operador El conveniente operador ?:puede obtener rápidamente un valor no nulo a partir de dos valores/expresiones.
CÓDIGO
DE TEXTO SIMPLE
:$a = verdadero ?: falso // verdadero;
$a = falso ?: verdadero // verdadero
$a = "" ?: 1; // 1
$a = 0 ?: 2; // 2
$a = matriz() ?: matriz(1); // matriz(1);
$a = strlen("") ?: strlen("a"); // 1
__callEstático()
Se agrega un nuevo método mágico __callStatic. Su función es similar a __call, pero solo es válida para métodos estáticos.
CÓDIGO
DE TEXTO SIMPLE
:ayudante de clase {
función estática __callStatic($nombre, $args) {
echo $nombre.'('.implode(',', $args).')';
}
}
ayudante::prueba("foo","bar"); // prueba(foo,bar)
¿Llamar dinámicamente a un método estático? ¿Llamar dinámicamente a un método estático? Combinación de movimiento y quietud.
CÓDIGO
DE TEXTO SIMPLE
:ayudante de clase {
función estática foo() { echo __METHOD__ }
}
$a = "ayudante";
$b = "foo";
$a::$b(); // ayudante::foo
Enlace estático tardío
No sé cómo traducirlo, tal vez se entienda más fácil si dejo el texto original. El tiempo de procesamiento de eventos de los métodos estáticos ha cambiado. Solía procesarse durante la compilación, pero ahora se procesa durante la ejecución.
Antes de PHP 5.3, el siguiente código generaba una A, pero esto no es lo que queremos. El método whoami se ha redefinido en la clase B. Debería generar B para ajustarse a lo que damos por sentado.
CÓDIGODE TEXTO SIMPLE
:
clase A {
función estática pública whoami() {
eco __CLASS__;
}
identidad de función estática pública() {
yo::whoami();
}
}
la clase B extiende A {
función estática pública whoami() {
eco __CLASS__;
}
}
B::identidad(); // A <-- PHP <5.3
El siguiente código usa static::whoami() para llamar a métodos estáticos. Después de PHP 5.3, dado que __CLASS__ se procesa durante la ejecución, la clase B se puede capturar con éxito en este ejemplo.
DE TEXTO SIMPLE
:
clase A {
función estática pública whoami() {
eco __CLASS__;
}
identidad de función estática pública() {
estático::whoami();
}
}
la clase B extiende A {
función estática pública whoami() {
eco __CLASS__;
}
}
B::identidad(); // B <-->= PHP 5.3
mysqlnd
Vea que mysqlnd se ha convertido en el controlador mysql predeterminado en PHP 5.3
, pero PDO_MySQL aún no es compatible con mysqlnd. Actualmente, solo la extensión mysql (i) puede usar
las nuevas características de PHP 5.3 introducidas anteriormente, todas las cuales son convenientes para los desarrolladores. Aquí hay una característica que les gusta mucho a los proveedores de alojamiento web.
Soporte mejorado para archivos ini
CGI/FastCGI admite una configuración INI similar a .htaccess. Cada directorio puede tener configuraciones INI. El nombre del archivo ini depende de la configuración de php.ini, pero [PATH=/var/www/domain.com], [HOST=www. El usuario no puede modificar la configuración de la sección .dominio.com.
Manejo de errores mejorado
Se permite definir variables y constantes en archivos ini y se pueden llamar directamente en el programa.
Se adjunta un ejemplo de un archivo ini.
CÓDIGO
DE TEXTO SIMPLE
:# Nombre de archivo php.ini definido por el usuario (.htaccess). El valor predeterminado es ".user.ini".
user_ini.filename=".usuario.ini"
#Si desea desactivar esta función, configúrela en un valor nulo.
usuario_ini.nombredearchivo=
# Longitud TTL (tiempo de vida) del archivo php.ini definido por el usuario, la unidad es segundos, lo entiendo como tiempo de vencimiento de la caché. El valor predeterminado es 300 segundos.
usuario_ini.cache_ttl=300
[RUTA=/var/www/dominio.com]
orden_variables = GPC
modo_seguro =1
[mis variables]
algunavar = "1234"
otravar = ${algunavar}; otravar == algunavar
[matrices ini]
foo[barra]=1
foo[123]=2
foo[]=3