Novedosas funcionalidades en PHP 8.1: funcionalidades y actualizaciones
No hace mucho, PHP 8.0 fue lanzado con bastante estruendos. Trae muchas peculiaridades novedosas, novedades de rendimiento y cambios; uno de los más apasionantes es el nuevo compilador JIT.
El planeta de la tecnología está en constante evolución, exactamente la misma PHP.
PHP 8.1 se lanzará pronto e incluye múltiples características interesantes. Debería mostrarse el 25 de noviembre de 2021 este año.
En este artículo, detallaremos las novedosas especificaciones de PHP 8.1. Los discutimos en aspecto, desde nuevas funciones y mejoras de desempeño hasta cambios y rechazos importantes.
¡Estarse inmovil!
Novedosas funciones en PHP 8.1
Primero presentaremos todas y cada una de las nuevas peculiaridades de PHP 8.1. Esta es una gran lista.
Comentario: Conforme se aproxima la fecha de publicación de PHP 8.1, esta lista puede medrar o reducirse. Procuramos mantenerlo actualizado.
Género de intersección pura
PHP 8.1 agregó soporte para géneros de intersecciones. Es afín a los modelos de conexión introducidos en PHP 8.0, pero para lo que se emplean, ocurre lo opuesto.
Para comprender mejor su uso, veamos de qué manera funciona la declaración de tipos en PHP.
Básicamente, puede agregar parámetros de tipo a parámetros de función, valores de retorno y atributos de clase. Esta labor se denomina mecanografía y garantiza que el valor sea del tipo acertado cuando se invoca. De lo contrario, TypeError se emite instantaneamente. Esto, por su parte, puede ayudar a depurar mejor el código.
Sin embargo, un tipo de notificación tiene sus límites. Los modelos de unión ayudan a resolver este inconveniente al reportar valores para múltiples tipos, y la entrada debe cumplir por lo menos con uno de los tipos informados.
Por otro lado, el RFC detalla el género de intersección de la próxima manera:
El "género de intersección" requiere que el valor satisfaga múltiples limitaciones de tipo, no una.
... El género de intersección puro se define a través de la sintaxis T1 & T2 & ... y se puede usar en todas las ubicaciones del tipo aprobado en la actualidad ...
Presta atención al empleo &
(Y) operador para señalar el género de cirugía; al contrario, utilizamos |
El operador (OR) señala el género de conexión.
La utilización de la mayor parte de los tipos estándar en tipos de intersección da como resultado tipos que jamás se pueden satisfacer (como enteros y cadenas). En consecuencia, el género de corte solo puede contener el género de clase (o sea, la interfaz y el nombre de la clase).
El siguiente es un caso de muestra del uso de un género de intersección:
class A
private Traversable&Countable $countableIterator;
public function setIterator(Traversable&Countable $countableIterator): void
$this->countableIterator = $countableIterator;
public function getIterator(): Traversable&Countable
return $this->countableIterator;
El código anterior define una variable Iterador calculado Como dos géneros de intersección: Puede ser conducido con calculadoEn un caso así, los dos tipos informados son interfaces.
El género de intersección también se ajusta a las reglas de variación estándar de PHP utilizadas en la verificación y restauración de tipos. Sin embargo, hay 2 reglas auxiliares para la interacción de tipos de intersección con subtipos. Puede leer más sobre la regla de separación del tipo de intersección en su RFC.
En ciertos idiomas de programación, puede combinar géneros de unión y unión en exactamente el mismo mensaje. Pero PHP 8.1 lo prohíbe. Por ende, su implementación se conoce como un tipo de cirugía "pura". Sin embargo, el RFC relata que está "reservado para uso futuro".
enumerar
PHP 8.1 al final añadió soporte para la catalogación (también popular como designaciones o tipos enumerados). Son tipos de datos definidos por el usuario que constan de un conjunto de valores posibles.
Los ejemplos de catalogación más habituales en lenguajes de programación son Valor booleano Redactar y true
con false
2 valores probables. Es tan común que se apoya en varios lenguajes de programación modernos.
Según el RFC, la lista de PHP se restringe inicialmente a la "lista de entidades":
La llegada de esta RFC se restringe a la "lista de unidades", esto es, la enumeración en sí es un valor y no una sintaxis fina de constantes primitivas sencillos y no tiene dentro ninguna otra información relevante. Esta función amplía de enorme manera la compatibilidad con el modelado de datos, las definiciones de tipos personalizados y las operaciones de estilo mónada. La lista permite técnicas de modelado que "hacen que los estados erróneos no se midan", lo que da como resultado un código más sólido sin pruebas exhaustivas.
Para llegar a este punto, el equipo de PHP estudió varios lenguajes que ya son compatibles con la lista. Su investigación mostró que puede dividir las listas en tres categorías primordiales: permanentes erradas, objetos fallidos y géneros de datos algebraicos terminados (ADT). ¡Esta es una lectura interesante!
PHP incorpora la lista "Fancy Objects" y planea expandirla a una FINADA completa más adelante. Imita las clases enumerados por Swift, Rust y Kotlin, tanto conceptual como semánticamente, si bien no imita directamente a ninguno de ellos.
RFC utiliza la famosa comparación de colores en una baraja de cartas para argumentar cómo marcha:
enum Suit
case Hearts;
case Diamonds;
case Clubs;
case Spades;
está eso aquí Cuadrar La lista define 4 valores probables: corazón, diamante, sociedad, con palaPuede usar estos valores de forma directa utilizando la próxima sintaxis: Suit::Hearts
, Suit::Diamonds
, Suit::Clubs
, con Suit::Spades
.
Este uso puede escucharse familiar pues las listas se basan en categorías y objetos. Se comportan de la misma manera y tienen casi los mismos requisitos. Las asignaciones usan exactamente el mismo espacio de nombres que las categorías, interfaces y propiedades.
La lista previo lleva por nombre Lista limpia.
También puede especificar Catalogación aceptada Si completamente desea concretar un valor correspondiente a un escalar, pero unicamente se puede aceptar un género de enumeración, o int
o string
(nunca fue).
enum Suit: string
case Hearts="H";
case Diamonds="D";
case Clubs="C";
case Spades="S";
Además de esto, cada una de las distintas situaciones que apoyan la enumeración debe tener valores únicos. Y jamás puede confundir viñetas y folletines de soporte.
El RFC también se ocupa de métodos de enumeración, métodos estáticos, permanentes, expresiones estándar, etc. Cubrir todo lo mencionado está fuera del alcance de este producto. Puede conocer todos los resultados positivos de la documentación.
Esta never
Género de retorno
PHP 8.1 tiene una exclusiva sugerencia de género de restauración llamada. agregada never
Es realmente útil utilizar funciones que siempre se usan throw
o exit
.
Según el RFC, la redirección de dirección de Internet siempre y en todo momento está habilitada exit
(Directa o de forma indirecta) es un excelente ejemplo de su empleo:
function redirect(string $uri): never
header('Location: ' . $uri);
exit();
function redirectToLoginPage(): never
redirect('/login');
Una suerte de never
-La actividad notificada debe cumplir tres condiciones:
- No debe
return
Oraciones bien establecidas. - No debe
return
Afirmaciones establecidas indirectamente (p. Ej. Si algo mas Opinión). - Ahí es donde tenemos que iniciar
exit
Opinión (explícita o implícita).
El ejemplo de redireccionamiento de URL anterior exhibe su uso explícito e implícito never
Género de retorno.
Esta never
Tipo de retorno y void
Género de retorno. Todos se aseguran de que una función o procedimiento no devuelva un valor. Sin embargo, hay una diferencia en la implementación de reglas mucho más estrictas, por ejemplo, una void
-La función indicada todavía está bien return
No hay un valor evidente, pero no puedes emplearlo. never
-Función declarada.
Empleo apoyado en experiencia void
Si quiere que PHP siga haciendo la función tras llamar, vayan juntos never
Si quieres lo contrario.
Incluso, never
Definido como el tipo "debajo", con lo que cualquier procedimiento de la clase informada never
No puede "para toda la vida" cambiar el tipo de retorno a otro tipo. No obstante, puede void
-Método de notificación never
-Procedimiento de notificación
Listas de RFC auténticos never
El tipo de retorno es noreturn
, Este es un tipo de restauración coincidente con 2 herramientas de análisis estático de PHP (Psalm y PHPStan). Debido a que los autores del Salmo y PHPStan sugirieron esto, mantuvieron su terminología, pero gracias a las convenciones de nomenclatura, el equipo de PHP está trabajando noreturn
Comparado never
, con never
Conviértase en un ganador para siempre, conque siempre y en todo momento sustituya las versiones PHP 8.1+ noreturn
con never
.
fibra
Históricamente, el código PHP la mayoria de las veces ha sido código sincrónico. La ejecución del código se suspende hasta el momento en que se devuelve el resultado, aun si es una función de Y también / S. Puede imaginarse por qué este proceso puede ralentizar la ejecución del código.
Existen múltiples soluciones de terceros que tienen la posibilidad de superar este obstáculo y aceptar a los programadores redactar código PHP de manera asincrónica, singularmente para Y también / S concurrentes. Algunos ejemplos populares son amphp, ReactPHP y Guzzle.
Sin embargo, no existe una forma convencional de conducir estas situaciones en PHP. Además, procesar código sincrónico y asincrónico en la misma pila de llamadas puede ocasionar otros inconvenientes.
La fibra es la manera en que PHP maneja la concurrencia mediante hilos virtuales (o hilos verdes). Procura cerrar la brecha entre el código síncrono y asincrónico rompiendo las funcionalidades de PHP sin afectar a toda la pila de llamadas.
Es un RFC promesa:
- Agregue soporte de fibra a PHP.
- Introduzca una exclusiva clase de fibra y una clase de reflexión correspondiente, ReflectionFiber.
- Añada las clases de excepción FiberError y FiberSalir para señalar fallos.
- Las fibras permiten una implementación de E / S transparente y sin óbices de las interfaces existentes (PSR-7, Doctrine ORM, etc.). Esto se origina por que se elimina el objeto de marca de posición (promesa). Por el contrario, las funcionalidades pueden indicar géneros de entrada de E / S en vez de elementos de marcador de posición, que no pueden saber los modelos resueltos porque PHP no admite genéricos.
Las fibras le dejan desarrollar funciones interrumpibles de pila completa de PHP y luego usarlas para llevar a cabo la multitarea colaborativa en PHP. Cuando Fiber detiene toda la pila de rendimiento, puede estar seguro de que el resto de su código no se dañará.
El diagrama ilustra el desarrollo de ejecución de código PHP utilizando fibras.
Para ilustrar la utilización de fibras, el RFC emplea este simple ejemplo:
$fiber = new Fiber(function (): void
$value = Fiber::suspend('fiber');
echo "Value used to sintetiza fiber: ", $value, "\n";
);
$value = $fiber->start();
echo "Value from fiber suspending: ", $value, "\n";
$fiber->sintetiza('test');
Creó una "fibra" en el código previo y la reveló en el instante con una cadena fiber
. Esta echo
La declaración sirve como una pista visual para la restauración de la fibra.
Puede obtener el valor de esta cadena de la llamada $fiber->start()
.
Entonces recupere la fibra empleando la cadena "prueba" devuelta de la llamada Fiber::suspend()
La ejecución completa del código genera el siguiente resultado:
Value from fiber suspending: fiber
Value used to sintetiza fiber: test
Este es un ejemplo de un libro de artículo básico sobre fibra PHP en funcionamiento. Este es otro ejemplo de fibras que efectúan siete solicitudes GET asincrónicas.
Sin embargo, la mayor parte de los programadores de PHP nunca procesan fibras directamente. La RFC aun hizo exactamente la misma recomendación:
La fibra es una función avanzada que la mayoría de los clientes no usan de manera directa. Esta función está destinada principalmente a bibliotecarios y autores de marcos para proporcionar bucles de eventos e interfaces de programación asincrónicas. Las fibras permiten que la ejecución de código asíncrono se integre sin inconvenientes en el código síncrono cualquier ocasión sin cambiar la pila de llamadas de la aplicación o añadir código de placa de caldera.
La API de fibra no debe usarse de forma directa en el código de nivel de app. Fibers proporciona una API básica de administración de flujo de bajo nivel para hacer abstracciones de nivel superior y utilizar esos resúmenes en el código de la app.
Dados los beneficios de desempeño, puede esperar que las bibliotecas y los marcos de PHP utilicen esta nueva característica. Va a ser interesante ver cómo introducen fibras en su ecosistema.
Nuevo readonly
característica
PHP 8.1 añadido readonly
característica. Pueden inicializarse solo una vez en la medida indicada. Una vez que inicializas, no puedes cambiar sus valores, esto lanzará un tiro falla Excepción.
Su RFC dice:
Una especie de Solo lectura Una función se puede inicializar solo una vez y solo desde el área donde se comunica. Cualquier otra especificación o cambio a este atributo resultará en una salvedad.
Ahora, se muestra un caso de muestra de de qué manera usarlo:
class Test
public readonly string $kinsta;
public function __construct(string $kinsta)
// Legal initialization.
$this->kinsta = $kinsta;
Una vez formateado, jamás podrá volver atrás. La integración de esta función en PHP puede reducir significativamente el código de la placa de la caldera que se usa normalmente para habilitar esta función.
Esta readonly
El hosting garantiza una fuerte inmutabilidad tanto dentro como fuera del sala. No importa qué código esté en el medio, llámenos readonly
El atributo siempre devuelve el mismo valor.
Sin embargo, use readonly
Los atributos tienen la posibilidad de no ser ideales para algunos usos; por poner un ejemplo, solo puede utilizarlos con atributos escritos porque no hay seguro de tipo implícito null
Y no puedo readonly
.
Asimismo establezca un readonly
Las propiedades no hacen que un elemento no cambie readonly
Las propiedades contienen exactamente el mismo objeto, pero el objeto en sí se puede modificar.
Otro pequeño inconveniente con esta función es que no se puede clonar. Ahora hay una solución para esta aplicación particular. Compruébelo si es necesario.
definición final
Estándar de clase
A partir de PHP 8.0, puede reemplazar las constantes de clase con sus subclases. Esto se debe a la forma en que se incorpora la herencia en PHP.
El siguiente es un caso de muestra de de qué manera omitir un valor estándar informado previamente:
class Moo
public const M = "moo";
class Meow extends Moo
public const M = "meow";
Si las vacas ahora quieren supervisar el accionar de su gato de forma más estricta (por lo menos en concepto de permanentes), tienen la posibilidad de usar las nuevas especificaciones de PHP 8.1 para lograrlo. final
Adaptador.
En el momento en que declaras una incesante como final
, Significa.
class Moo
final public const M = "moo";
class Meow extends Moo
public const M = "meow";
// Fatal error: Meow::M cannot override final constant Moo::M
Puede leer mucho más sobre esa constante de clase final en PHP RFC.
Nuevo fsync()
con fdatasync()
función
PHP 8.1 incluye 2 novedosas funciones de sistema de archivos. agregada fsync()
con fdatasync()
Parecen familiares para quienes están familiarizados a las funciones de Linux del mismo nombre. Esto se origina por que están relacionados y también incorporados solo para PHP.
De hecho, este complemento llega tarde. PHP era entre los pocos idiomas de programación importantes que aún no había introducido fsync () y fdatasync (), es decir, antes de PHP 8.1.
Esta fsync()
Funcionalidades afines a las de PHP fflush()
Función, pero en un aspecto hay una diferencia importante; no obstante fflush()
Adecentar el búfer interno de la aplicación al S.O., fsync()
Además de esto, asegúrese de que el búfer de adentro se vacíe en la memoria física. Esto garantiza una escritura completa y continua para que logre proseguir obteniendo información una vez que una app o el sistema se bloqueen.
Este es un ejemplo de su uso.
$doc="kinsta.txt";
$kin = fopen($doc, 'ki');
fwrite($kin, 'doc info');
fwrite($kin, "\r\n");
fwrite($kin, 'more info');
fsync($kin);
fclose($kin);
Agregar fsync()
La última llamada asegura que todos y cada uno de los datos almacenados en el búfer de adentro de PHP o el S.O. se escriban en la memoria. Antes de eso, se evita la ejecución de algún otro código.
Las funcionalidades relacionadas son fdatasync()
Úselo para sincronizar datos, pero no siempre metadatos. Si no se requieren datos para los metadatos, esta llamada de función acelera un poco el proceso de escritura.
Sin embargo, tenga presente que PHP 8.1 no lo admite fdatasync()
Todo está en Windows; solo actúa como un nick fsync()
En un dispositivo POSIX fdatasync()
Establecido apropiadamente.
Nuevo array_is_list()
función
Las tablas PHP pueden contener claves enteras y de cadena. Esto significa que puede utilizarlos para muchos propósitos, incluidas listas, tablas de resumen, diccionarios, compilaciones, pilas, colas y mucho más. Aun puede envolver matrices dentro de matrices para hacer matrices multidimensionales.
Él puede verificar efectivamente si hay una entrada en particular en la tabla, pero no es tan simple contrastar si faltan transiciones de tabla, claves fuera de orden, etc. En resumen, no se puede contrastar de manera rápida que la tabla sea una lista.
La función array_is_list () comprueba si las claves de la tabla están preparadas en el orden preciso 0
, Y no hay escapatoria. Si se cumplen todas las condiciones, se va a devolver true
Por defecto, también se restaura true
Para matrices vacías.
Ahora se muestran algunos ejemplos de de qué forma se pueden emplear adjuntado con ambos true
con false
Para cumplir con las condiciones:
// true array_is_list() examples
array_is_list([]); // true
array_is_list([1, 2, 3]); // true
array_is_list(['cats', 2, 3]); // true
array_is_list(['cats', 'dogs']); // true
array_is_list([0 => 'cats', 'dogs']); // true
array_is_list([0 => 'cats', 1 => 'dogs']); // true
// false array_is_list() examples
array_is_list([1 => 'cats', 'dogs']); // as first key isn't 0
array_is_list([1 => 'cats', 0 => 'dogs']); // keys are out of order
array_is_list([0 => 'cats', 'bark' => 'dogs']); // non-integer keys
array_is_list([0 => 'cats', 2 => 'dogs']); // gap in between keys
La lista de tablas PHP con claves fuera de orden es una posible fuente de fallo, use esta función para asegurar un cumplimiento estricto Correr El requisito previo para prolongar el código es una buena adición a PHP.
Novedosas propiedades del sodio XChaCha20
Sodium es una biblioteca de cifrado actualizada y fácil de utilizar para encriptado, descifrado, descentralización de claves de acceso, firma, etcétera. El paquete libsodium de PECL se agrega al contenedor sodio a fin de que los programadores de PHP logren usarlo.
Aun empresas de tecnología líderes como Fb, Discord, Malwarebytes y Valve usan libsodium para mantener a los usuarios seguros con conexiones veloces y seguras.
libsodium acepta el algoritmo de cifrado XChaCha20 para el cifrado y descifrado de datos, en especial para el cifrado de flujo. De manera afín, el complemento PECL-Libsodium ya funciona con XChaCha20, pero solo acepta el código de verificación de mensajes Poly1305.
Muchas aplicaciones PHP usan XChaCha20 de forma directa para codificar la transmisión. Desde PHP 8.1, hay tres novedosas funcionalidades disponibles para facilitar las cosas, lo que le permite cifrar o transcribir datos sin autenticación con XChaCha20. Este estado se denomina "estado separado".
Las nuevas peculiaridades de XChaCha20 son:
sodium_crypto_stream_xchacha20_keygen
: Devuelve una clave azarosa segura para Natrium_crypto_stream_xchacha20.sodium_crypto_stream_xchacha20
: Un flujo de claves que expande una clave y un número aleatorio en bytes pseudoaleatorios.sodium_crypto_stream_xchacha20_xor
: Utilice un número y una clave aleatorios (sin autenticación) para cifrar el mensaje.
Además de esto, se han definido 2 novedosas permanentes PHP en el espacio de nombres global:
SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES
(Cuota 32)SODIUM_CRYPTO_STREAM_XCHACHA20_NONCEBYTES
(Cuota veinticuatro)
Pero utilícelo con precaución. Gracias a que no existe autenticación, los procesos de descifrado son atacables a los asaltos criptográficos recurrentes.
Puede leer más sobre su empleo y requisitos en la página de GitHub.
Nueva clase IntlDatePatternGenerator
La biblioteca ICU subyacente en PHP admite la creación de formatos de fecha y hora locales, pero no se puede ajustar completamente.
Por poner un ejemplo, si quiere hacer un formato de fecha y hora específico de la zona antes de PHP 8.0, puede hacerlo utilizando el estándar IntlDateFormatter predefinido de 6 formas:
IntlDateFormatter::LONG
: Durante mucho más tiempo, como p. Ej. 10 de noviembre de 2017 o 11:22:33IntlDateFormatter::MEDIUM
: Mucho más corto como 10 de noviembre de 2017IntlDateFormatter::SHORT
: Solo números 11 de octubre de 2017 o 11.22
Cada uno tiene su RELATIVE_
De forma alternativa, establece el formato de fecha en un área limitada antes o tras la fecha actual. En PHP, el valor es el dia de ayer, hoy dia, con Mañana.
Por servirnos de un ejemplo, suponga que quiere usar la versión extendida del año y la versión corta del mes. 10/10/2017A partir de PHP 8.0, esto ahora no es posible.
En PHP 8.1+, puede usar el nuevo formato para detallar el formato de fecha, mes y hora Generador de imágenes de fecha internacional Glorioso. Puede dejar el orden exacto de estas piezas al diseñador.
Tenga en cuenta que aunque esta categoría solo contiene esta palabra Fecha Entre ellos, según cuidados intensivos Generador de modelos de fecha y horaAsimismo le permite hacer formatos de hora flexibles; para facilitar la denominación, el equipo de PHP decidió utilizar uno mucho más corto Generador de imágenes de fecha en todo el mundo Semestre.
Este es un caso de muestra directamente de su RFC:
$skeleton = "YYYYMMdd";
$today = \DateTimeImmutable::createFromFormat('Y-m-d', '2021-04-24');
$dtpg = new \IntlDatePatternGenerator("de_DE");
$pattern = $dtpg->getBestPattern($skeleton);
echo "de: ", \IntlDateFormatter::formatObject($today, $pattern, "de_DE"), "\n";
$dtpg = new \IntlDatePatternGenerator("en_US");
$pattern = $dtpg->getBestPattern($skeleton), "\n";
echo "en: ", \IntlDateFormatter::formatObject($today, $pattern, "en_US"), "\n";
/*
de: 24.04.2021
en: 04/24/2021
*/
En el código de arriba esqueleto La variable detalla el formato de fecha u hora a emplear. No obstante, el diseñador se ocupa del orden del resultado final.
Acepta formato de imagen AVIF
El formato del archivo de imagen AVIF o AV1 es un formato de imagen libre de regalías relativamente nuevo basado en el formato de codificación de video AV1. Aparte de una relación de compresión mucho más alta (y por lo tanto un tamaño del archivo más pequeño), asimismo admite múltiples funcionalidades como transparencia, HDR, etcétera.
El formato AVIF solo se estandarizó últimamente (8 de junio de 2021). Esto abrió la puerta a navegadores como Chrome 85+ y Mozilla firefox 86+ para añadir soporte para imágenes AVIF.
El procesamiento de imágenes PHP 8.1 y el complemento GD agregaron soporte para imágenes AVIF.
No obstante, para incluir esta función, debe compilar el complemento GD con soporte AVIF. Para realizar esto, ejecute el siguiente comando.
Debian / Ubuntu:
apt install libavif-dev
Fedora / RHEL:
dnf install libavif-devel
Esto instalará todas las dependencias existentes. Ahora, puede compilar el soporte AVIF corriendo el próximo comando --with-avif
Con logotipo ./configure
Manuscrito.
./buildconf --force
./configure --enable-gd --with-avif
Si desea empezar desde el comienzo de un nuevo entorno, asimismo puede activar otras extensiones de PHP aquí.
Tras la instalación, puede probar si la compatibilidad con AVIF está habilitada ejecutando el próximo comando en el terminal PHP:
php -i | grep AVIF
Si ha instalado AVIF adecuadamente, va a ver los próximos desenlaces:
AVIF Support => enabled
Asimismo puedes usar gd_info()
Llame para obtener una lista de funcionalidades de GD, incluyendo si Soporte AVIF La función está activada.
Esta extensión PHP 8.1 GD actualizada asimismo agrega dos novedosas peculiaridades para conducir imágenes AVIF: imagecreatefromavif
con imageavif
Marchan del mismo modo que sus contrapartes JPEG y PNG.
Esta imagecreatefromavif
Esta función restaura la instancia de GdImage desde la imagen AVIF especificada. A continuación, puede utilizar esta instancia para editar o convertir la imagen.
Segundo imageavif
Esta función envía ficheros de imagen AVIF. Por poner un ejemplo, puede emplearlo para convertir JPEG a AVIF:
$image = imagecreatefromjpeg('image.jpeg');
imageavif($image, 'image.avif');
Puede leer mucho más sobre esta novedosa función en la página de GitHub.
Nuevo $_FILES: full_path
Clave de descarga de directorio
PHP mantiene una gran cantidad de variables predefinidas para rastrear distintas cosas. Uno es la variable $ _FILES, que contiene elementos de una matriz asociativa cargados a través de el método HTTP POST.
La mayoría de los navegadores modernos aceptan la descarga de directorios terminados mediante el cuadro de envío de ficheros HTML. Aun PHP <8.1 admite esta característica, pero tiene una gran advertencia; no puede cargar una carpeta con una estructura de directorio exacta o una ruta relativa porque PHP no proporciona esta información. avanzando $_FILES
En grandes cantidades.
Una nueva característica llamada full_path
llegar $_FILES
En grandes cantidades. Con esta nueva información, puede guardar rutas relativas al servidor o copiar la estructura exacta del directorio.
Puede probar esta información imprimiendo la siguiente información $FILES
Uso de matrices var_dump($_FILES);
Mando.
Sin embargo, utilice esta función con precaución. Asegúrese de protegerse de los ataques comunes de descarga de archivos.
Soporte de descifrado de matriz para clave de cadena
PHP 7.4 agregó el uso de un operador de extensión de tabla (...Puede ser usado array_merge()
Función. Sin embargo, esta función está limitada solo a los sistemas de claves numéricas, porque abrir una cadena de un paquete es inconsistente cuando se combinan tablas con claves duplicadas.
Sin embargo, PHP 8 agregó soporte para parámetros con nombre, lo que elimina esta restricción. Por lo tanto, descomprimir matrices ahora también admite grupos de claves de cadena que contienen la misma sintaxis:
$array = [...$array1, ...$array2];
Este ejemplo de RFC muestra cómo manejar la concatenación de matrices con claves de cadena duplicadas en PHP 8.1:
$array1 = ["a" => 1];
$array2 = ["a" => 2];
$array = ["a" => 0, ...$array1, ...$array2];
var_dump($array); // ["a" => 2]
Aquí, la clave de cadena "a" aparece tres veces antes de descomprimir y combinar la matriz. Pero solo su último valor pertenece $array2
ganar.
Una representación clara de los números octales
PHP admite una variedad de sistemas numéricos, incluidos decimal (base 10), binario (base 2), octal (base 8) y hexadecimal (base 16). El sistema numérico decimal es el predeterminado.
Si desea utilizar un sistema de numeración diferente, deberá agregar un prefijo regular a cada número:
- Hexadecimal:
0x
Prefijo. (Ej. 17 =0x11
) - Binario:
0b
Prefijo. (Ejemplo 3 =0b11
) - Octal:
0
Prefijo. (Ej. 9 =011
)
Puede ver cómo el prefijo de un sistema de números octales difiere de los prefijos de otros sistemas. Para estandarizar este problema, muchos lenguajes de programación han agregado soporte para símbolos de números octales específicos: 0o
o 0O
.
A partir de PHP 8.1, puede escribir el ejemplo anterior (es decir, número 9 y base 10) en el sistema de números octales 0o11
o 0O11
.
0o16 === 14; // true
0o123 === 83; // true
0O16 === 14; // true
0O123 === 83; // true
016 === 0o16; // true
016 === 0O16; // true
Además, esta nueva característica también se aplica al guión bajo del separador de texto numérico que se introdujo en PHP 7.4.
Lea más sobre esta nueva característica de PHP 8.1 en su RFC.
Soporte para el algoritmo de compresión MurmurHash3 y xxHash
PHP 8.1 agregó soporte para MurmurHash3 y xxHash para algoritmos hash. No están diseñados para fines criptográficos, pero aún ofrecen una impresionante aleatoriedad, dispersión y singularidad de salida.
Estos nuevos algoritmos hash son más rápidos que la mayoría de los algoritmos hash actuales para PHP. De hecho, algunas de estas variaciones del algoritmo hash son más rápidas que el rendimiento de la RAM.
Porque PHP 8.1 también brinda soporte para reportar ciertos algoritmos $options
Parámetros, puede hacer lo mismo con estos nuevos algoritmos. El valor predeterminado para este nuevo parámetro es []
Por lo tanto, no afecta ninguna de nuestras actividades de descentralización actuales.
Puede leer más sobre estas nuevas características de PHP 8.1 en su página de GitHub: MurmurHash3, xxHash, $ opciones específicas del algoritmo.
Compatibilidad con DNS sobre HTTPS (DoH)
DNS sobre HTTPS (DoH) es un protocolo para una solución DNS sobre el protocolo HTTPS. Con HTTPS, DoH cifra los datos entre el cliente y el solucionador de DNS y mejora la privacidad y seguridad del usuario al prevenir ataques de intermediarios.
A partir de PHP 8.1, puede configurar el complemento curl para configurar un servidor DoH; debe estar compilado con PHP rizado Versión 7.62+. Para la mayoría de los principales sistemas operativos (incluidas las distribuciones de Linux) esto no es un problema, ya que normalmente incluyen Curl 7.68+.
Puede especificarlo ingresando la URL del servidor DoH CURLOPT_DOH_URL
Ajustes.
$doh = curl_init('https://kinsta.com');
curl_setopt($doh, CURLOPT_DOH_URL, 'https://dns.google/dns-query');
curl_exec($doh);
En el ejemplo anterior, usamos el servidor DNS público de Google. También tenga en cuenta que usamos https://
En todas las URL utilizadas. Asegúrese de configurarlo por completo, ya que Curl no tiene un servidor DNS predeterminado al que regresar.
También puede seleccionar la lista de servidores DoH públicos incluidos en el documento Curl.
Además, la referencia CURLOPT_DOH_URL en la documentación de Curl explica el uso completo de los distintos parámetros.
Utilice el archivo CURLStringFile para cargar el archivo desde la cadena
El complemento PHP Curl admite solicitudes HTTP (S) al descargar archivos Archivo curl Para lograr esto, la clase acepta el URI o la ruta del archivo, el tipo MIME y el nombre del archivo final.
Sin embargo, con Archivo curl Categoría, solo puede aceptar la ruta del archivo o URI, no el contenido del archivo en sí. Si ha descargado archivos a la memoria (por ejemplo, imágenes procesadas, documentos XML, archivos PDF), debe data://
URI con codificación Base64.
pero rizado Se admite una forma más sencilla de aceptar el contenido del archivo Archivo de cadena curl La clase apoya esto.
Puede leer más sobre cómo se implementó en PHP 8.1 en la página de GitHub.
Nuevo MYSQLI_REFRESH_REPLICA
continuamente
PHP 8.1 mysqli La extensión agrega una nueva constante llamada. adicional MYSQLI_REFRESH_REPLICA
Corresponde al existente MYSQLI_REFRESH_SLAVE
continuamente.
Este cambio fue positivo en MySQL 8.0.23 para abordar la sensibilidad racial en el vocabulario técnico (los ejemplos más comunes son "esclavo" y "maestro").
Tenga en cuenta que las constantes antiguas no se eliminan ni deshabilitan. Los desarrolladores y las aplicaciones aún pueden usarlo. Para los desarrolladores y las empresas que buscan renunciar a tales condiciones, este nuevo estándar es solo una opción.
Utilice el almacenamiento en caché hereditario para mejorar el rendimiento
El almacenamiento en caché de herencia es una característica nueva en opcache que puede eliminar la sobrecarga de la herencia de clases PHP.
Las clases de PHP se compilan y almacenan en caché por separado usando opcache. Sin embargo, están vinculados a cada solicitud mientras se ejecutan. Este proceso puede incluir varias comprobaciones de compatibilidad y métodos / atributos / constantes de cotización para secciones y propiedades.
Por lo tanto, aunque el resultado de cada solicitud es el mismo, aún lleva mucho tiempo completarlo.
Herede todas las categorías dependientes individuales (secciones, interfaces, propiedades, tipos de atributos, métodos) del enlace de caché y almacene los resultados en la memoria compartida en caché. Debido a que esto solo ocurre una vez, el legado requiere menos orientación.
También elimina las restricciones de las clases de constantes, por ejemplo, B. Constantes no resueltas, atributos escritos y verificación de tipos de covarianza. Por lo tanto, todas las clases almacenadas en el opcache no se modifican, lo que reduce aún más el número de comandos necesarios.
En general, se esperan ganancias significativas en el desempeño. El escritor de parches Dimitry Stogov dijo que era un 8 por ciento mejor que el básico "¡Hola, mundo!" Sinfonía. Programa. No podemos esperar para probarlo en nuestros puntos de referencia de PHP a continuación.
La primera clase se llama sintaxis
PHP 8.1 agregó una sintaxis llamada de última generación para reemplazar la codificación existente con cadenas y matrices, además de una creación más limpia terminaciónEsta nueva gramática también está disponible con herramientas de análisis estático y se respeta el alcance del anuncio.
A continuación, se muestran algunos ejemplos de RFC:
$fn = Closure::fromCallable('strlen');
$fn = strlen(...);
$fn = Closure::fromCallable([$this, 'method']);
$fn = $this->method(...)
$fn = Closure::fromCallable([Foo::class, 'method']);
$fn = Foo::method(...);
Aquí todos y cada uno de los pares de frases son iguales. Tres en punto (...) La sintaxis es similar al parámetro (...$args
). Además de esto, los parámetros aún no se han cumplido.
Cambios en PHP 8.1
PHP 8.1 también incluye cambios en su sintaxis y funcionalidad actuales. Vamos a discutirlos:
Requerido para shell PHP amigable Línea de lectura desplazarse
Php Línea de lectura El complemento habilita funciones de shell interactivas como navegación, autocompletar, edición, etc. Aunque está incluido en PHP, no está habilitado predeterminado.
Puede usar la CLI de PHP para acceder al shell PHP amigable -a
Opciones de la línea de comandos:
php -a
Interactive shell
php >
php > echo "Hello";
Hello
php > function test() {
php { echo "Hello";
php
php > test();
Hello
Antes de PHP 8.1, aun sin Línea de lectura Complemento habilitado. Las funcionalidades interactivas del shell no funcionaron como se suponía, como resultado -a
Las opciones son poco relevantes.
Si no permite el complemento Readline en PHP 8.1 CLI, el shell amigable mostrará un mensaje de fallo completo.
php -a
Interactive shell (-a) requires the readline extension.
El estado de error ya establecido de MySQLi se establece en anormal
Antes de PHP 8.1, MySQLi utilizaba fallos silenciosos de forma predeterminada. Esta acción normalmente provoca que su código no siga un riguroso manejo de fallos / excepciones. Los desarrolladores deben implementar sus funcionalidades concretas de manejo de fallos.
PHP 8.1 cambió este accionar estableciendo el modo perfecto de informe de errores predeterminado de MySQLi para generar salvedades.
Fatal error: Uncaught mysqli_sql_exception: Connection refused in ...:...
Ya que este es un gran avance, debe usar la versión de PHP <8.1 mysqli_report
Ejecútelos antes de conectarse por vez primera a MySQLi, o puede hacer lo mismo corriendo un valor de informe de fallo mysqli_driver
Ejemplo.
El RFC prosigue cambios afines introducidos en PHP 8.0.
Sufijos de línea personalizables para escritura CSV
Antes de PHP 8.1, la función de escritura CSV integrada en PHP, fputcsv
con SplFileObject::fputcsv
, Codificado de manera recia para la inserción \n
(O salto de línea) al final de cada línea.
PHP 8.1 acepta un nuevo factor llamado. adicional eol
Sobre estas funcionalidades. Puede emplearlo para pasar caracteres configurables al final de una línea; todavía lo utiliza por defecto \n
Características. Por consiguiente, aún puede usarlo en el código existente.
Las reglas de escape habituales se aplican al empleo de caracteres al final de una línea. Si quieres emplear \r
, \n
o \r\n
Como caracteres EOL, debe encerrarlos entre comillas.
Esta es la página de GitHub que sigue a este nuevo cambio.
Nuevo version_compare
Limitaciones del operador
Php version_compare()
La función equipara 2 cadenas con números de versión. Esta función admite un tercer parámetro opcional operator
Pon a prueba ciertas relaciones.
Aunque no se indica explícitamente en la documentación, antes de PHP 8.1 puede entablar este factor en un valor de parte (p. Ej. g
, l
, n
) Sin errores.
PHP 8.1 agrega limitaciones mucho más estrictas version_compare()
función operator
Argumentos para superar esta situación. Los únicos operadores que puede emplear actualmente son:
- ==, =, con Igualada
- ! =, <>, con Nació
- > con Tonelaje bruto
- > = con Dar
- < con eso
- <= con Esta
Los valores parciales del operador ya no existen.
En este momento use las funciones de codificación y decodificación HTML ENT_QUOTES | ENT_SUBSTITUTE
Las entidades HTML son representaciones textuales de caracteres; en caso contrario, se interpretan en formato HTML; piensa en semejantes señales <
con >
Se emplea para detallar etiquetas HTML (p. Ej. ,
,
).
Entidades HTML <
sí señor <
(Menor que carácter) y >
sí señor >
(Mayor que). Puede usar con seguridad estas entidades HTML en documentos HTML sin iniciar el motor de representación del navegador.
Por servirnos de un ejemplo, Aparece como
En el navegador en vez de interpretarlos como etiquetas HTML.
Antes de PHP 8.1, las funciones htmlspecialchars () y htmlentities () cambiaban símbolos, como ", <
, >
, con &
Para sus unidades HTML. Pero tienen una cita ('') A su estándar de entidad HTML. Si el artículo tiene dentro un UTF-8 incorrecto, también se devuelve una cadena vacía.
En PHP 8.1. Estas funcionalidades de codificación y decodificación HTML (y funciones relacionadas) asimismo transforman las citas individuales en entidades HTML de manera predeterminada.
Si el texto concretado contiene letras y números no válidos, la función los reemplaza con comodines Unicode () en vez de devolver una cadena vacía. PHP 8.1 cambia las firmas de estas funcionalidades ENT_QUOTES | ENT_SUBSTITUTE
En vez de ENT_COMPAT
Por defecto.
La mayor parte de los marcos ya están en uso ENT_QUOTES
Como boleto estándar. Por consiguiente, no notará mucha diferencia debido a este cambio, pero o sea nuevo. ENT_SUBSTITUTE
La bandera no se utiliza bastante. PHP 8.1 hace que los caracteres UTF-8 no válidos sean reemplazados por caracteres en vez de devolver una cadena vacía.
Advertencia ilegal bolso Llamada de función
Php compact()
La función es muy fácil de utilizar. Puede usarlo para hacer una tabla que contenga variables con nombres y valores.
Por ejemplo, considere el próximo código:
$animal="Cat";
$sound = 'Meow';
$region = 'Istanbul';
compact('animal', 'sound', 'region');
// ['animal' => "Cat", 'sound' => "Meow", 'region' => "Istanbul"]
La documentación de la función compacta señala que solo acepta valores de tabla que contienen factores de cadena o valores de cadena. No obstante, antes de PHP 7.3, todas las cadenas establecidas se ignoran tranquilamente.
PHP 7.3 cambiado compact()
Si usa variables indefinidas, la función da una notificación. PHP 8.1 va un paso más allá y da una advertencia.
Puede leer la página de GitHub para entender de qué forma ocurrió este cambio.
Nueva transferencia de elementos a objetos de clase.
Uno de los objetivos a largo plazo de PHP es pasar de los recursos a los elementos estándar.
Por razones históricas, los elementos de elementos se utilizan ampliamente en aplicaciones PHP. Por consiguiente, la transferencia de recursos a objetos de clase ha de ser lo mucho más destructiva posible. PHP 8.1 migró cinco de estos recursos:
Esta file_info
Los recursos se transfieren al destino finfo
objeto
La clase finfo de PHP es fileinfo
Funcionalidades pero empleo finfo
La función se prende resource
Objeto y file_info
Redacta en lugar de la instancia finfo
La clase en sí.
PHP 8.1 corrige esta anomalía.
Los recursos IMAP se transmiten al destino IMAP\Connection
Objeto de clase
Nuevo según la meta de la transferencia de elementos. IMAP\Connection
Por último, cuando PHP cambia la información de implementación de la clase, la clase minimiza los cambios potencialmente disruptivos.
Esta novedosa categoría también fué anunciada final
Entonces no puedes extend
eso.
Lea mucho más sobre la implementación en la página de GitHub.
Recurso de conexión FTP en este momento FTP\Connection
Objeto de clase
PHP <8.1 si está creando una conexión FTP ftp_connect()
o ftp_ssl_connect()
Funciona y obtén uno recurso Ofrecer el objeto FTP.
PHP 8.1 añadido FTP\Connection
Genial para arreglar esto y de qué forma IMAP\Connection
Genial, también ha sido proclamado final
Entonces no se extenderá.
Lea más sobre la implementación en la página de GitHub.
ID de fuente movido a GdFont
Objeto de clase
El complemento PHP GD da una función imageloadfont () que carga un mapa de bits personalizado y devuelve su ID de recurso (entero) al ID de fuente.
En PHP 8.1, esta función permite a. Para devolver fuente Además de esto, para simplificar la transición, se usan todas y cada una de las funcionalidades que tienen identificadores de recursos previamente aceptados. imageloadfont()
Tomemos uno nuevo ahora fuente Objeto de clase.
Lea mucho más sobre este movimiento en su página de GitHub.
Migrar elementos LDAP a elementos
LDAP, o Protocolo rápido de acceso a directorios, se usa para entrar a un "servidor de directorio". De la misma la estructura de directorios de un disco duro, es una banco de información única que guarda datos en una composición de árbol.
PHP incluye extensiones LDAP que admiten o restauran recurso Elementos precedentes a PHP 8.1. Sin embargo, ahora se han trasladado sin problemas a una nueva categoría. recurso Los modelos editados son:
ldap backlink
Elementos también\LDAP\Connection
Objeto de claseldap result
Elementos asimismo\LDAP\Result
Objeto de claseldap result entry
Recursos asimismo\LDAP\ResultEntry
Objeto de clase
Explore su página de GitHub para comprender mejor este movimiento.
Los elementos de Pspell en este momento son objetos de clase
Puede utilizar el complemento Pspell de PHP para verificar la ortografía y las recomendaciones de palabras.
Utilice PHP <8.1 pspell
con pspell config
Un tipo de objeto de recurso que tiene un identificador de número entero. Estos dos objetos de recursos ahora son reemplazados por el usuario PSpell\Dictionary
con PSpell\Config
Objeto de clase.
Como en la migración anterior, todas las operaciones pspell que aceptaron o devolvieron etiquetas de objeto de recurso heredaron una nueva instancia de la instancia de objeto.
Visite la página de GitHub para obtener más información.
Configuración en PHP 8.1
Muchas funciones anteriores se han deshabilitado en PHP 8.1. La siguiente es una breve descripción general de las funciones que están deshabilitadas en PHP 8.1:
No puede pasar null
Para un parámetro de función interna que no permite valores NULL
A partir de PHP 8.0, su funcionalidad interna se acepta tácitamente null
Incluso hay valores para parámetros que no se pueden restablecer; esto no se aplica a las funciones definidas por el usuario, solo aceptan null
Parámetros a resetear.
Por ejemplo, considere este uso:
var_dump(str_contains("foobar", null));
// bool(true)
está eso aquí null
El valor se convierte silenciosamente en una cadena vacía; así devuelve el resultado true
.
El propósito de este RFC es sincronizar el funcionamiento de las funciones internas emitiendo una advertencia deshabilitada en PHP 8.1.
var_dump(str_contains("foobar", null));
// Deprecated: Passing null to argument of type string is deprecated
En la próxima versión principal de PHP (es decir, PHP> = 9.0), la eliminación se transforma en TypeError, lo que provoca que el accionar de las funcionalidades internas sea congruente con las funcionalidades definidas por el usuario.
Limitado $GLOBALS
Empleo sosprechado
Php $GLOBALS
La variable proporciona una referencia directa a su tabla de símbolos interna. Esta característica tiene un soporte complejo y perjudica el rendimiento de la mesa. Además de esto, rara vez se emplea.
Cambio indirecto según RFC $GLOBALS
Por el momento no está tolerado. Este cambio no funciona con versiones anteriores.
El encontronazo de este cambio es parcialmente pequeño:
En los primeros paquetes de compositores de 2k que encontré 23 casos usan $ GLOBALS En vez de referirse a él directamente, después de un examen aproximado, solo hay dos casos $ Global No hay que usar en modo de solo lectura.
Sin embargo, la operación de solo lectura $GLOBALS
Siga haciendo un trabajo como es costumbre; la escritura por el momento no es compatible $GLOBALS
como un todo. Por consiguiente, puede esperar una pequeña mejora en el desempeño, especialmente en el momento en que se usan matrices PHP estándar.
Restaurar el género de retorno de la función interna
PHP 8.0 permite a los desarrolladores reportar factores y tipos de retorno a la mayoría de las funciones y métodos internos. Esta hay que a múltiples dispositivos RFC como: B. Errores de tipo constante para funciones internas, tipo de conexión 2.0 y tipo mixto v2.
En muchos casos, no obstante, se puede perder la información de tipo. Ciertos de ellos tienen dentro tipos que tienen recursos. salir Omitir parámetros, devolver géneros de métodos y funcionalidades no finitos, o métodos que no analizan parámetros según con reglas en general. Puede leer los datos precisos de su RFC.
Esta RFC solo aborda el inconveniente de los tipos de devolución para métodos no finitos. No obstante, el equipo de PHP no lo suprimió por completo de inmediato, sino que proporcionó una ruta de transferencia punto por punto para actualizar la base del código con las clases de restauración de métodos correctos.
Las clases de retorno de métodos internos no finales (si es posible) se reportan temporalmente en PHP 8.1 y se aplican en PHP 9.0. Esto quiere decir que en PHP 8.x, si se suprimen los métodos internos con tipos de retorno incompatibles, se mostrarán mensajes de "expiración" durante las comprobaciones heredadas y PHP 9.0 cometerá estos fallos mortales.
Si ve esta leyenda desactualizado después de la actualización de PHP 8.1, asegúrese de actualizar el género de restauración del método.
No se recomienda una interfaz en serie
PHP 7.4 introduce un mecanismo personalizado para serializar objetos utilizando dos nuevos métodos mágicos: __serialize()
con __unserialize()
Estos nuevos métodos están diseñados para arreglar los imperfectos. Reemplazar Serializable El diseño es definitiva.
La RFC iniciativa se elimina de manera permanente de la redacción. Serializable.
En PHP 8.1 en el momento en que lo habilitas Serializable El diseño no se ha establecido __serialize()
con __unserialize()
Método, PHP emite una observación "desactualizada".
Deprecated: The Serializable interface is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in ... en línea ...
Si apoyas PHP <7.4 con PHP> = 7.4, Deberías lograr ambos Serializable El diseño y los nuevos métodos mágicos hay. PHP> = 7.4 Versión, se prefiere el método mágico.
No compatible float
llegar int
La conversión ha expirado
PHP es un lenguaje escrito dinámicamente. Por tanto, en muchos casos existe, como es natural, un tipo obligatorio. La mayor parte de estos cambios forzados son inofensivos y muy convenientes.
No obstante, si puedes flotador El número se convierte a Entero, La pérdida de datos con frecuencia ocurre, por servirnos de un ejemplo, en el momento en que desplaza el mouse 3,14 Transformar a entero 3, Perdió su puntuación.
Lo mismo pasa en el momento en que un número de punto flotante sobrepasa el rango de enteros de la interfaz, o en el momento en que una secuencia de punto flotante se convierte en un número entero.
PHP 8.1 corrige este comportamiento y amolda mejor la escritura dinámica a los últimos lenguajes de programación. La meta es hacer que esta implementación sea predecible e deducible.
PHP 8.1 exhibe una notificación desactualizada si no es compatible flotador Es necesario hacerlo de manera indirecta EnteroPero, ¿qué es un número de coma flotante compatible con enteros? El RFC respondió:
Los flotantes son compatibles con números enteros si tienen las próximas características:
- Es el número (es decir, no NaN o infinito)
- En el rango de enteros de PHP (en dependencia de la interfaz)
- Sin decimales
Este aviso de rescisión se actualizará Errores tipográficos En la próxima versión principal de PHP (esto es, PHP 9.0).
Esta mysqli::get_client_info
Métodos y mysqli_get_client_info($param)
Obsoleto
El diseño del cliente MySQL define dos constantes: client_info
(Una cuerda) y client_version
(Entero). El controlador originario de MySQL (MySQLnd) es una parte del código fuente oficial de PHP y combina estos estándares con PHP. En Libmysql, representan la versión de la biblioteca cliente en el instante de la traducción.
Antes de PHP 8.1, mysqli logró que estos estándares estuviesen libres de 4 formas: mysqli_driver
característica, mysqli properties
, mysqli_get_client_info()
Función y mysqli::get_client_info
Método, si bien no hay forma client_version
.
MySQLnd provoca que estos estándares estén disponibles para PHP de 2 formas: permanentes y llamadas a funciones. Si desea usar estas dos opciones para estandarizar cómo emplear mysqli, PHP 8.1 establece otras dos opciones:
get_client_info
Método en mysqli Genial, puedes usarlo en su sitiomysqli_get_client_info()
Función.mysqli_get_client_info()
Funciones con parámetros. Llame a la función sin factores para eludir notas administrativas.
Lea mucho más sobre esta configuración en su página de GitHub.
Todos mhash*()
Función obsoleta (extensión hash)
Integración PHP 5.3 mhash*()
Función en ext/hash
Como capa de compatibilidad ext/mhash
PHP 7.0 se eliminó más tarde ext/mhash
.
No como hash_*()
Función, mhash*()
Las funciones no en todos los casos están disponibles. Deben habilitarse por separado al configurar PHP.
En PHP 7.4, el complemento hash se combina con PHP, lo que lo transforma en el complemento PHP predeterminado, pero aún admite la activación. --enable-mhash
Opción por fundamentos de compatibilidad.
El equipo de PHP decidió deshabilitar las funciones mhash * () en PHAS 8.1 y eliminarlas por completo en PHP 9.0. Las funcionalidades están deshabilitadas mhash()
, mhash_keygen_s2k()
, mhash_count()
, mhash_get_block_size()
con mhash_get_hash_name()
Puede emplear un estándar ext/hash
Las funcionalidades los sustituyen.
Ambos filter.default
con filter.default_options
No se recomiendan los cambios INI
Php filter.default
La configuración INI le deja utilizar filtros a todas y cada una de las cambiantes PHP superglobales, a comprender, datos GPCRS ($_GET
, $_POST
, $_COOKIE
, $_REQUEST
, con $_SERVER
).
Por poner un ejemplo, puede contratar filter.default=magic_quotes
o filter.default=add_slashes
(Basado en la versión de PHP) Despierte la controvertida y dañina función de cita mágica de PHP (eliminada de PHP 5.4).
Esta filter.default
La configuración de INI proporciona una funcionalidad agregada al permitir que mucho más filtros la degraden. Otra alternativa es, por servirnos de un ejemplo, filter.default=special_chars
- Habilite las comillas mágicas solo para HTML. Hay mucha menos información sobre estos cambios.
PHP 8.1 emite una observación de caducidad si filter.default
Está configurado para compartir unsafe_raw
(Inicialmente) No va a ver un mensaje de configuración separado filter.default_options
, Pero PHP 9.0 suprime estas dos configuraciones INI.
De forma alternativa, puede usar la función filter_var (). Usa el filtro concretado para filtrar las cambiantes.
Anticuado autovivification
existir Incorrecto
PHP permite la activación automática (creación automática de una tabla a partir de valores incorrectos). Esta función es realmente útil en el momento en que una variable no está definida.
Sin embargo, si el valor es falso o cero en el momento en que la tabla se crea automáticamente, esto no es ideal.
Esta RFC no permite la activación automática de valores no válidos. Sin embargo, tenga en cuenta que todavía se permite la activación automática de ceros y variables indefinidas.
En PHP 8.1, se da una declaración sobre la configuración a las cambiantes agregadas para redactar falso:
Deprecated: Automatic conversion of false to array is deprecated in
PHP 9.0 asimismo arroja un error mortal que es idéntico a otros tipos escalares.
Esta mysqli_driver->driver_version
La propiedad esta obsoleta
MySQLi extendido mysqli_driver-> driver_version La propiedad no se ha actualizado a lo largo de 13 años. Más allá de que se han realizado muchos cambios en el controlador desde entonces, todavía devuelve el valor de la versión previo del controlador, lo que provoca que esta característica sea sin importancia.
En PHP 8.1, no se aconseja el atributo mysqli_driver-> driver_version.
Otros pequeños cambios
Hay otras versiones obsoletas de PHP 8.1. Es cansador enumerarlos todos aquí. Le recomendamos que consulte el RFC de manera directa para entender estos pequeños cambios. 4
La página PHP GitHub también tiene instrucciones para actualizar desde PHP 8.1. Cuenta todos y cada uno de los cambios esenciales que debe considerar antes de actualizar a PHP 8.1.
Generalizar
PHP 8.1 no está lejos de nosotros. Y ha prometido duplicar a su predecesor, lo que no es tarea simple. Cuando empieze, puede estar seguro de que Kinsta funciona con PHP 8.1 en ámbitos de prueba y en tiempo real (incluido con DevKinsta).
Pensamos que las características mucho más atrayentes de PHP 8.1 son balas, fibras, solo tipos de corte y considerablemente más. sus mejoras de desempeño. No podemos aguardar a poner PHP 8.1 en marcha y cotejar distintas frameworks PHP y CMS.
Asegúrese de marcar esta publicación de blog como referencia en el futuro.
¿Qué característica de PHP 8.1 le agrada mucho más? Comparta sus pensamientos con la comunidad en la sección de comentarios a continuación.
Ahorre tiempo, dinero y maximice el desempeño del ubicación:
- Ayuda inmediata de expertos en hospedaje de WordPress, 24 horas cada día, 7 días a la semana.
- Integración de Cloudflare.
- La audiencia global incluye 28 centros de datos en el mundo entero.
- Utilice la supervisión integrada del desempeño de las aplicaciones para mejorar.
Todo esto y mucho más en un solo plan sin contratos a largo plazo, asistencia de inmigración y una garantía de devolución de dinero de 30 días. Consulte los planes o hable con un gerente de ventas para hallar un plan que funcione para usted.
Deja una respuesta