Lista de nuevas características de php7

nuevas funciones de php7

1. Operador de nave espacial

Se usa para comparar dos expresiones, por ejemplo, cuando \ (a es menor, igual o mayor que \) b, devuelve -1,0,1 respectivamente

echo 1 <=> 1; // 0 
echo PHP_EOL; 
echo 1 <=> 2; // - 1 
echo PHP_EOL; 
echo 2 <=> 1; // 1

2. Declaración de tipo escalar y tipo de valor de retorno

  • php7 puede declarar parámetros de tipo cadena (cadena), entero (int), punto flotante y booleano.
  • La declaración de tipo de parámetro no está restringida al modo predeterminado y al modo estricto. En el modo predeterminado, cuando el parámetro pasado no se ajusta al tipo declarado, se intentará primero la conversión de tipo (la conversión de tipo aquí solo se aplica a tipos convertibles) . Convert'a 'Int también informará un error), mientras que en modo estricto, un error se informará directamente
declare (tipos_estrictos = 1); // tipos_estrictos = 1 significa 
función de modo estricto sum (int ... $ ints) { 
	return array_sum ($ ints); 
} 
var_dump (sum (1, '2', '3.1', 4.1) );
Resultados de la
Error fatal: error de tipo no detectado: el argumento 2 pasado a sum () debe ser del tipo entero, cadena dada
  • Si el modo estricto está desactivado, los parámetros entrantes se convertirán primero a Int y el resultado es 10

Tipo de valor de retorno restringido

El siguiente código declara que el valor de retorno es int

declarar (tipos_estrictos = 1); 
función suma (int ... $ ints): int 
{ 
	return array_sum ($ ints); 
} 
var_dump (suma (1,2,3)); // 6

php7.1 expande el tipo de valor de retorno de la función, puede definir el tipo de valor de retorno como vacío, sin importar si el modo estricto está activado, siempre que la función tenga una declaración de retorno diferente a "retorno;", se producirá un error informó

declare (strict_types = 1);  
function sum (int ... $ ints): void 
{ 
	// return NULL; // reporta un error 
	return; // declaraciones distintas de "return;" también reporta un error  
	// return array_sum ( $ entradas); 
} 
var_dump (suma (1,2,3));

php7.1 tiene más soporte para tipos de parámetros y tipos de valor de retorno. El tipo puede ser un tipo nulo. Agregar "?" antes del parámetro o declaración de tipo de valor de retorno significa que es nulo o el tipo declarado.

declarar (tipos_estrictos = 1); 
prueba de función (? int $ a) :? int 
{ 
	return $ a; 
} 
var_dump (prueba (nulo)); // NULL  
var_dump (prueba (1)); // int (1) 
var_dump (prueba ('a')); // Error fatal

3.Operador de combinación nula

$ página = isset ($ _ GET ['p'])? $ _ GET ['p']: 0; 
// php7 
$ página = $ _ GET ['p'] ?? 0; 

// Operador ternario 
$ página = $ _GET ['p'] ?? $ _POST ['p'] ?? 0;

4. Matriz constante

Antes de php7, era imposible definir una matriz constante a través de define, php7 admite esta operación

define ('ESTUDIANTE', ['niño', 'niña']); 
print_r (ESTUDIANTE);

5. Importación por lotes de espacios de nombres

// php 之前
use Space \ ClassA; 
use Space \ ClassB; 
use Space \ ClassC C; 

// php7 
usa Space \ {ClassA, ClassB, ClassC como C};

6.interfaz lanzable

  • Antes de php7, si hay un error de sintaxis o un error fatal en el código, el programa reportará directamente un error y saldrá. La interfaz global throwable se implementa en php7. La excepción original y algunos errores implementan esta interfaz.

  • Este tipo de error puede ser detectado por el primer bloque try / catch coincidente como una excepción. Si no hay un bloque de captura coincidente, llame a la función de excepción para manejarlo. Si no se ha registrado la función de manejo de excepciones, se procesará de la forma tradicional (error fatal)

  • La clase Error no hereda de Exception, por lo que no se puede detectar con catch (Exception $ e) {}. Puede usar catch (Error $ e) {} o registrar una función de manejo de excepciones (set_exception_handler ()) para detectar Error

intente { 
	abc (); 
} captura (Error $ e) { 
	print_r ($ e); 
} 
echo 123;
Error fatal en php5, el código después de salir inmediatamente no se ejecutará
php7
Objeto de error 
( 
    [mensaje: protegido] => Llamada a función indefinida abc () 
    [cadena: Error: privado] =>  
    [código: protegido] => 0 
    [archivo: protegido] => / mnt / hgfs / www / web / md.php 
    [línea: protegido] => 4 
    [rastreo: Error: privado] => Array 
        ( 
        ) 

    [anterior: Error: privado] =>  
) 
123

O manejarlo registrando una función de manejo de excepciones

set_exception_handler (función ($ e) { 
	echo "err:". print_r ($ e, true); 
	
}); 

a B C(); 
echo 123;

Los resultados bajo php7, php5 siguen siendo un error fatal

err: Objeto de error 
( 
    [mensaje: protegido] => Llamada a función indefinida abc () 
    [cadena: Error: privado] =>  
    [código: protegido] => 0 
    [archivo: protegido] => / mnt / hgfs / www / web / md.php 
    [línea: protegido] => 7 
    [rastreo: Error: privado] => Array 
        ( 
        ) 

    [anterior: Error: privado] =>  
)
之后 的 也 不会 执行 了

7.Cierre :: llamada ()

Antes de php7, al agregar métodos dinámicamente a un objeto, Closure se puede usar para copiar un objeto de cierre y vincularlo a un objeto $ this y al alcance de la clase

class People { 
	privado $ edad = 10; 
} 
$ f = function () { 
	return $ this-> age + 1; 
}; 

$ p = $ f-> bindTo (gente nueva, 'Gente'); 
echo $ p ();

En php7, puede vincular temporalmente un objeto de cierre al objeto $ this y llamarlo a través de la llamada

class People { 
	privado $ edad = 10; 
} 
$ f = function () { 
	return $ this-> age + 1; 
}; 

echo $ f-> call (nuevas personas);

8.intdiv

echo intdiv (10,3);

9. Enumere los corchetes.

$ a = [1,2,3]; 
lista ($ n1, $ n2, $ n3) = $ a; 

// php7 
[$ n1, $ n2, $ n3] = [4,5,6]; // [] no es una matriz, sino una forma corta de lista

10. Foreach atraviesa la matriz y ya no modifica el puntero interno

$ arr = [1,2,3,4,5,6]; 
foreach ($ arr como $ clave => $ valor) { 
	if ($ valor == 2) romper; 
} 
echo actual ($ arr); // php7 下 1 , php5 下 3

11. Las clases anónimas se pueden definir usando una nueva clase y las clases anónimas se pueden usar en lugar de definiciones completas.

Caché de interfaz { 
	lectura de función pública (); 
} 
clase Ca { 
	caché $ privado; 
	función pública setcache (Cache $ cache) { 
		$ this-> cache = $ cache; 
	} 

} 
$ fcache = new Ca; 
$ fcache-> setcache (la nueva clase implementa Cache { 
	función pública read () { 

	} 
});

Otros, eliminan ASP y las etiquetas PHP de script, eliminan $ HTTP_RAW_POST_DATA, clase anónima, visibilidad de clase constante, etc.

Supongo que te gusta

Origin blog.51cto.com/huangkui/2677778
Recomendado
Clasificación