Schimbări în clase și obiecte

instanceof, is_a(), is_subclass_of() și catch

În PHP 5.0, is_a() a devenit învechit și a fost înlocuit cu operatorul instanceof. Au existat unele probleme cu implementarea inițială a instanceof, care se baza pe __autoload() pentru a căuta clasele ce lipsesc. Dacă clasa nu era prezentă, instanceof arunca un E_ERROR fatal din cauza eșecului __autoload() de a descoperi acea clasă. Același comportament îl avea și operatorul catch și funcția is_subclass_of(), ambele din același motiv.

Nici una din aceste funcții sau operatori nu apelează __autoload() în PHP 5.1.x, iar utilizarea class_exists() în codul-sursă scris pentru PHP 5.0.x, cu toate că nu este problematică în nici un fel, nu mai este necesară.

Metodele private abstracte

Metodele private abstracte au fost susținute între PHP 5.0.0 și PHP 5.0.4, însă apoi au fost interzise în baza faptului că comportamentele private și abstract se excludeau reciproc.

Modificatorii de acces în interfețe

În PHP 5.0, declarațiile funcțiilor în interfețe erau tratate exact la fel ca și declarațiile funcțiilor în clase. Aceasta nu mai era adevărat începând cu octombrie 2004, când numai modificatorul de acces public a fost permis în declarațiile funcțiilor din interfețe. Începând cu aprilie 2005 - înainte de apariția lansării PHP 5.0b1 - modificatorul static de asemenea a fost permis. Oricum, modificatorii protected și private acum vor arunca un E_ERROR, la fel ca și abstract. Observați însă că această schimbare nu ar trebui să afecteze codul dumneavoastră sursă existent, deoarece nici unul din acești modificatori nu are sens în contextul interfețelor.

Schimbări în regulile de moștenire

În PHP 5.0 era posibil de a avea o declarație a funcției într-o clasă derivată, care nu era corespunzătoare cu declarația aceleiași funcții în clasa de bază, de ex.

Acest cod-sursă va cauza o eroare E_STRICT emisă în 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;
    }
}
?>

Constantele de clasă

În PHP 5.0.x următorul cod-sursă era valid:

În PHP 5.1.x redefinirea unei constante de clasă va arunca o eroare fatală E_ERROR.

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

?>