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';
}
?>
Schimbări în clase şi obiecte
