PHP 7.1.0 Released

Cambiamenti di classi e oggetti

instanceof, is_a(), is_subclass_of() e catch

In PHP 5.0, is_a() è stata deprecata e sostituita dall' operatore instanceof. Ci sono stati alcuni problemi con l'implementazione iniziale di instanceof, che si basava su __autoload() per eseguire la ricerca delle classi mancanti. Se la classe non era presente, instanceof avrebbe lanciato un E_ERROR fatale a causa del fallimento di __autoload() per scoprire quella classe. Lo stesso comportamento si è verificato nell'operatore catch e nella funzione is_subclass_of(), per la stessa ragione.

Nessuna di queste funzioni o operatori richiama __autoload() in PHP 5.1.x, e i workaround di class_exists() usati nel codice scritto per PHP 5.0.x, pur non problematici in alcun modo, non sono più necessari.

Metodi privati astratti

I metodi privati astratti sono stati supportati tra PHP 5.0.0 e PHP 5.0.4, ma sono stati poi non consentiti sulla base del fatto che i comportamenti di private e abstract si escludono reciprocamente.

Modificatori di accesso nelle interfacce

Sotto PHP 5.0, le dichiarazioni di funzioni nelle interfacce sono state trattate esattamente nello stesso modo come le dichiarazioni di funzioni nelle classi. Questo non è stato il caso dall'Ottobre del 2004, quando solo il modificatore di accesso public è stato consentito in dichiarazioni di funzione di interfaccia. Dal mese di Aprile del 2005 - che precede la release PHP 5.0b1 - anche il modificatore static è stato permesso. Tuttavia, i modificatori protected e private non generanno un E_ERROR, così come abstract. Si noti che questo cambiamento non dovrebbe interessare il proprio codice esistente, come nessuno di questi modificatori ha senso nel contesto delle interfacce comunque.

Cambiamenti nelle regole di ereditarietà

Sotto PHP 5.0, era possibile avere una dichiarazione di funzione in una classe derivata che non corrispondeva con la dichiarazione della stessa funzione nella classe base, ad esempio

Questo codice causerà un errore E_STRICT emesso sotto PHP 5.1.x.

<?php
class Base {
    function &
return_by_ref() {
        
$r 1;
        return 
$r;
    }
}

class 
Derived extends Base {
    function 
return_by_ref() {
        return 
1;
    }
}
?>

Costanti delle classi

Sotto PHP 5.0.x, il codice seguente era valido:

Sotto PHP 5.1.x, la ridefinizione di una costante di classe lancerà un E_ERROR fatale.

<?php
class test {
    const 
foobar 'foo';
    const 
foobar 'bar';
}

?>
add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top