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 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.
Î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.
Î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;
}
}
?>
Î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';
}
?>