TODO
<?php
/*
ejemplos
*/
Las propiedades de objeto ahora pueden tener su visibilidad
set
controlada separadamente de la visibilidad get
.
<?php
class Example
{
// El primer modificador de visibilidad controla la visibilidad de lectura,
// y el segundo modificador controla la visibilidad de escritura.
// La visibilidad de lectura no debe ser más restrictiva que la visibilidad de escritura.
public protected(set) string $name;
public function __construct(string $name)
{
$this->name = $name;
}
}
Ahora es posible crear objetos cuya inicialización se difiere hasta su acceso. Las bibliotecas y frameworks pueden aprovechar estos objetos perezosos para diferir la recuperación de datos o dependencias necesarias para la inicialización.
<?php
class Example
{
public function __construct(private int $data)
{
}
// ...
}
$initializer = static function (Example $prototype): void {
// Recuperar datos o dependencias
$data = getData();
// Inicializar
$prototype->__construct($data);
};
$reflector = new ReflectionClass(Example::class);
$object = $reflector->newLazyInstance($initializer);
#[\Deprecated]
El nuevo atributo Deprecated puede ser utilizado para marcar funciones, métodos,
y constantes de clase como obsoletos. El comportamiento de esta funcionalidad obsoleta utilizando este
atributo corresponde al del mecanismo de obsolescencia ya existente para las funcionalidades proporcionadas
por PHP mismo. La única excepción es que el código de error emitido es
E_USER_DEPRECATED
en lugar de E_DEPRECATED
.
Las obsolescencias existentes en las funcionalidades proporcionadas por PHP mismo han sido actualizadas para utilizar este atributo, mejorando los mensajes de error emitidos incluyendo una breve explicación.
Se ha añadido la función request_parse_body() que permite interpretar las cabeceras RFC1867 (multipart) en las solicitudes HTTP no-POST.
new
sin paréntesisLas nuevas expresiones con argumentos de constructor ahora son referenciables, lo que significa que pueden encadenar llamadas a métodos, accesos a propiedades, etc., sin encerrar la expresión entre paréntesis.
La información de depuración para WeakReference ahora también mostrará
el objeto al que se hace referencia, o null
si la referencia ya no es válida.
La salida de Closure::__debugInfo() ahora incluye el nombre, el archivo y la línea de la Closure.
Salir de un espacio de nombres ahora desambigua los símbolos vistos. Esto permite utilizar un símbolo en un espacio de nombres, incluso si un espacio de nombres anterior ha declarado un símbolo con el mismo nombre.
curl_version() ahora devuelve un valor
feature_list
adicional, que es un array asociativo de todas las funcionalidades cURL conocidas, y si
están soportadas (true
) o no (false
).
Se han añadido las constantes CURL_HTTP_VERSION_3
y
CURL_HTTP_VERSION_3ONLY
(disponibles desde libcurl 7.66 y 7.88) como opciones disponibles para
CURLOPT_HTTP_VERSION
.
Se ha añadido CURLOPT_PREREQFUNCTION
como opción cURL que
acepta un callable para llamar después de la conexión, pero antes
del envío de la solicitud. Este callable debe devolver CURL_PREREQFUNC_OK
o
CURL_PREREQFUNC_ABORT
para autorizar o anular la solicitud.
Se ha añadido CURLOPT_SERVER_RESPONSE_TIMEOUT
,
que anteriormente estaba disponible bajo el nombre CURLOPT_FTP_RESPONSE_TIMEOUT
.
Ambas constantes tienen el mismo valor.
Se ha añadido CURLOPT_DEBUGFUNCTION
como opción cURL que
acepta un callable que se llama durante el ciclo de vida de la solicitud
con el objeto CurlHandle, un entero que contiene el tipo de mensaje de depuración,
y una cadena que contiene el mensaje de depuración. El tipo de mensaje de depuración es uno de las siguientes constantes:
CURLINFO_TEXT
CURLINFO_HEADER_IN
CURLINFO_HEADER_OUT
CURLINFO_DATA_IN
CURLINFO_DATA_OUT
CURLINFO_SSL_DATA_IN
CURLINFO_SSL_DATA_OUT
CURLINFO_HEADER_OUT
no debe definirse porque utiliza la misma funcionalidad de libcurl.
curl_getinfo() ahora devuelve una clave
posttransfer_time_us
, que contiene el número de microsegundos
desde el inicio hasta que el último byte fue enviado. Cuando se sigue una redirección, el tiempo de cada solicitud se suma.
Este valor también puede recuperarse pasando
CURLINFO_POSTTRANSFER_TIME_T
al parámetro
option
de curl_getinfo(). Esto requiere libcurl 8.10.0 o superior.
Se ha añadido el espacio de nombres Dom con nuevas clases en contraste con las clases DOM existentes (por ejemplo, Dom\Node es el nuevo DOMNode). Estas clases son compatibles con HTML 5 y cumplen con las especificaciones WHATWG, resolviendo así errores de larga data en la extensión DOM. Las clases DOM antiguas siguen estando disponibles para asegurar la compatibilidad hacia atrás.
Se ha añadido DOMNode::compareDocumentPosition() con sus constantes asociadas:
DOMNode::DOCUMENT_POSITION_DISCONNECTED
DOMNode::DOCUMENT_POSITION_PRECEDING
DOMNode::DOCUMENT_POSITION_FOLLOWING
DOMNode::DOCUMENT_POSITION_CONTAINS
DOMNode::DOCUMENT_POSITION_CONTAINED_BY
DOMNode::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
Ahora es posible pasar cualquier callable a
DOMXPath::registerPhpFunctions().
Además, con DOMXPath::registerPhpFunctionNs(), los callbacks pueden registrarse para usar la sintaxis de llamada de función nativa
en lugar de usar php:function('nombre')
.
Se ha añadido NumberFormatter::ROUND_HALFDOWN
para
complementar la funcionalidad existente de NumberFormatter::ROUND_HALFEVEN
.
Se ha añadido soporte para las curvas basadas en Curve25519 + Curve448. Específicamente, las claves x25519, ed25519, x448 y ed448 son soportadas en openssl_pkey_new(), openssl_pkey_get_details(), openssl_sign(), y openssl_verify() han sido extendidas para soportar estas claves.
Implementación de PASSWORD_ARGON2 hash de contraseña. Requiere OpenSSL 3.2 y una compilación NTS.
La versión de pcre2lib incluida se ha actualizado a la versión 10.44.
En consecuencia, ahora se reconoce {,3}
como un cuantificador en lugar de un texto.
Además, el significado de algunas clases de caracteres en modo UCP ha cambiado.
Consulte el » registro de cambios de PCRE2
para obtener un registro de cambios completo.
Los atributos Pdo\Dblib::ATTR_STRINGIFY_UNIQUEIDENTIFIER
y
Pdo\Dblib::ATTR_DATETIME_CONVERT
ahora actúan como atributos booleanos en lugar de atributos enteros.
Por lo tanto, definir el atributo a través de PDO::setAttribute()
y recuperarlo a través de PDO::getAttribute() espera y devuelve un bool.
El atributo PDO::ATTR_AUTOCOMMIT
ahora actúa como un
atributo booleano en lugar de un atributo entero.
Por lo tanto, definir el atributo a través de PDO::setAttribute()
y recuperarlo a través de PDO::getAttribute() espera y devuelve un bool.
La extensión ahora expone ciertas API C++ de Firebird, por lo que la compilación de esta extensión ahora requiere un compilador C++. Además, la extensión ahora debe compilarse contra fbclient 3.0 o superior.
Los atributos PDO::ATTR_AUTOCOMMIT
PDO::ATTR_EMULATE_PREPARES
, y
PDO::MYSQL_ATTR_DIRECT_QUERY
ahora actúan como atributos booleanos en lugar de atributos enteros.
Por lo tanto, definir el atributo a través de PDO::setAttribute()
y recuperarlo a través de PDO::getAttribute() espera y devuelve un bool.
La información de conexión DSN, cuando se define, ahora tiene prioridad sobre los argumentos del constructor PDO, estando más cerca de lo que indica la documentación.
Se ha añadido soporte para la extensión de marca de tiempo Unix para los archivos Zip.
Se ha añadido la posibilidad de cambiar el nombre del archivo de historial de .php_history
a través de
la variable de entorno PHP_HISTFILE.
ReflectionAttribute ahora contiene una propiedad name para almacenar el nombre del atributo.
ReflectionClassConstant::__toString() y ReflectionProperty::__toString() ahora devuelven los comentarios de documentación adjuntos.
Se han añadido varios nuevos métodos y constantes relacionados con la funcionalidad de los objetos perezosos:
ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE
ReflectionClass::SKIP_DESTRUCTOR
Se ha añadido soporte para la notación clark para los espacios de nombres en la clase.
Ahora es posible especificar dependencias en una clase con la notación clark
para resolver un tipo con un espacio de nombres específico a una clase específica.
Por ejemplo: '{http://example.com}foo' => 'FooClass'
.
Las instancias de DateTimeInterface que se pasan a xsd:datetime
o elementos similares ahora
se serializan como elementos en lugar de como cadenas vacías.
La persistencia de sesiones ahora funciona con un módulo de sesión separado.
Se ha añadido una nueva enumeración RoundingMode con un nombre más claro
y una mejor descubribilidad en comparación con las constantes
PHP_ROUND_*
.
Además, se han añadido cuatro nuevos modos de redondeo que solo están disponibles a través de
la nueva enumeración RoundingMode.
Ahora es posible utilizar parámetros que contienen tanto comillas simples como dobles.
Ahora es posible pasar cualquier callable a XSLTProcessor::registerPhpFunctions().
Se han añadido XSLTProcessor::$maxTemplateDepth y XSLTProcessor::$maxTemplateVars para controlar la profundidad de recursión de la evaluación del template XSL.
Se ha añadido la constante ZipArchive::ER_TRUNCATED_ZIP
,
que ha sido añadida en libzip 1.11.