Rilascio del linguaggio di programmazione PHP 7.4

Dopo un anno di sviluppo presentata rilascio del linguaggio di programmazione PHP 7.4. Il nuovo ramo include una serie di nuove funzionalità, oltre a diverse modifiche che interrompono la compatibilità.

Chiave miglioramenti in PHP 7.4:

  • Proprietà tipizzate - le proprietà della classe ora possono includere dichiarazioni di tipo, ad esempio:

    classe Utente {
    pubblico int $id;
    stringa pubblica $nome;
    }

  • Abbreviato sintassi per la definizione delle funzioni "fn(parameter_list) => expr" con associazione dell'ambito per valore. Ad esempio, “fn($x) => $x + $y” è analogo a “$fn2 = funzione ($x) usa ($y) {return $x + $y;}”);
  • Operatore di assegnazione abbreviato "??=" che può essere utilizzato per definire un valore predefinito ("a ??= b" è simile a "a = a ?? b", se "a" è definito il suo valore viene memorizzato, se non lo è definito viene assegnato il valore "b" );
  • Limitato opportunità preservare la gerarchia di ereditarietà dei tipi nei tipi restituiti derivati ​​o la possibilità di invertire la gerarchia dei tipi originali nei tipi di argomenti derivati ​​(covarianza tipo restituito e controvarianza del tipo di argomento). I seguenti costrutti possono ora essere utilizzati in PHP:

    classe A {}
    la classe B estende A {}

    produttore della classe {
    metodo della funzione pubblica(): A {}
    }
    class ChildProducer estende Producer {
    metodo della funzione pubblica(): B {}
    }

  • Operatore di decompressione all'interno degli array “…$var”, permettendo eseguire la sostituzione degli array esistenti quando si definisce un nuovo array;

    $parti = ['mela', 'pera'];
    $frutta = ['banana', 'arancia', ...$parti, 'anguria'];
    // ['banana', 'arancia', 'mela', 'pera', 'anguria'];

  • Opportunità rappresentazione visiva di grandi numeri con delimitatori in letterali numerici (1_000_000_00);
  • Sostegno collegamenti deboli, che consentono di conservare un riferimento a un oggetto, ma non impediscono al Garbage Collector di eliminare l'oggetto associato;
  • Nuovo механизм serializzazione degli oggetti (una combinazione di Serializable e __sleep()/__wakeup()), che ha sostituito l'interfaccia Serializable, che sarà deprecata;

    // Restituisce un array contenente tutti gli stati dell'oggetto;
    funzione pubblica __serialize(): array;

    // Ripristina lo stato di un oggetto da un array
    funzione pubblica __unserialize(array $data): void;

  • Autorizzato a generare eccezioni da un metodo __accordare();
  • Aggiunto il supporto per il precarico della cache del codice oggetto. Aggiunto parametro per l'impostazione
    preload, attraverso il quale è possibile specificare uno script PHP che verrà compilato ed eseguito all'avvio del server. Questo script può caricare l'opcode di altri file tramite il loro inserimento diretto oppure utilizzando la funzione opcache_compile_file();

  • Aggiunta funzione crc32c all'estensione Hash per calcolare checksum utilizzando il polinomio di Castagnoli;
  • Aggiunto supporto alla funzione password_hash() per i metodi di hashing della password argon2i e argin2id, nell'implementazione della libreria Sodium, se PHP è costruito senza libargon;
  • Aggiunta la funzione mb_str_split(), simile a str_split(), ma che opera non con byte ma con posizioni di carattere in una stringa multibyte;
  • La funzione strip_tags() ora ha la capacità di passare un array con nomi di tag, ad es. invece di strip_tags($str, ‘’) ora puoi specificare strip_tags($str, [‘a’, ‘p’]);
  • proc_open() consente di enumerare gli operandi in un array anziché in una stringa da eseguire, e fornisce anche il reindirizzamento del thread e il supporto per un descrittore di file nullo;

    proc_open(['php', '-r', 'echo "Hello World\n";'], $descriptors, $pipes);

    // Come 2>&1 nella shell
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['reindirizzamento', 1]], $pipes);

    // come 2>/dev/null o 2>nul nella shell
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes);

  • Le estensioni Firebird/Interbase, Recode e WDDX sono escluse dalla distribuzione base. Queste estensioni sono ora distribuite tramite PECL;
  • Trasferito in categoria antiquato funzionalità come operatori ternari nidificati senza parentesi, accesso a elementi di array e stringhe utilizzando parentesi graffe (“$var{$idx}”), is_real() e conversione in real, utilizzando la parola chiave parent senza una classe genitore, configurazioni del parametro consent_url_include, utilizzando array_key_exists() sugli oggetti.

    Le funzioni get_magic_quotes_gpc(), get_magic_quotes_runtime() e
    hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), Restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().

    È stato fornito un avviso sull'uso di una funzionalità obsoleta quando si tenta di elaborare simboli errati nelle funzioni
    base_convert(), bindec(), octdec() e hexdec() e quando si specifica un modello non di stringa in mb_ereg_replace().

Fonte: opennet.ru

Aggiungi un commento