Schimbări incompatibile în sens invers

Cu toate că codul-sursă existent în PHP 5 trebuie să funcționeze fără schimbări, ar trebui să atrageți atenția la următoarele schimbări incompatibile în sens invers:

  • getrusage() întoarce NULL când îi sunt transmise argumente incompatibile începând cu PHP 5.2.1.
  • ZipArchive::setCommentName() întoarce TRUE în caz de succes începând cu PHP 5.2.1.
  • ZipArchive::setCommentIndex() întoarce TRUE în caz de succes începând cu PHP 5.2.1.
  • SplFileObject::getFilename() întoarce denumirea fișierului, și nu calea/relativă/spre/fișier, începând cu PHP 5.2.1.
  • S-a modificat prioritatea variabilei de mediu PHPRC pe sistemele Win32. Variabila de mediu PHPRC acum are prioritate față de calea stocată în registrul Windows.
  • CLI SAPI nu mai caută fișierele php.ini sau php-cli.ini în directorul curent. În PHP 5.1.x a fost introdusă o facilitate nedocumentată care făcea ca binarul CLI să caute în Directorul de Lucru Curent (DLC) un fișier de configurare PHP, ducând potențial la un comportament imprevizibil atunci când era citit un fișier de configurare neașteptat. Această funcționalitate a fost eliminată în versiunea 5.2.0, și PHP nu mai caută în DLC fișierele php.ini sau php-cli.ini. Accesați de asemenea secțiunea manualului referitoare la linia de comandă.
  • A fost adăugată o preîntâmpinare la efectuarea operației modulus 0. În versiunile anterioare ale PHP, efectuarea operației "integer % 0" nu emitea nici un mesaj de preîntâmpinare, întorcând, în loc, o valoare neașteptată FALSE. Începând cu PHP 5.2.0 această operație va emite un E_WARNING, după cum e cazul și în orice altă situație când se efectuează împărțirea la zero.
    <?php
    print 10 0;
    /* Warning:  Division by zero in filename on line n */
    ?>
  • A fost modificat __toString() pentru a fi apelat oricând este aplicabil. Metoda magică __toString() acum va fi apelată în contextul unui string, adică oriunde un obiect este utilizat ca string. Situația când se întoarce un string care conține identificatorul obiectului a fost abandonată în PHP 5.2.0. Aceasta devenise problematică deoarece identificatorul obiectului nu poate fi considerat unic. Această schimbare va însemna că aplicația dumneavoastră este defectuoasă dacă v-ați bazat pe identificatorul obiectului în calitate de valoare întoarsă. Acum încercarea de a utiliza această valoare în calitate de string va rezulta în emiterea unei erori fatale interceptabile.
    <?php
    class foo {}
    $foo = new foo;
    print 
    $foo;
    /* Catchable fatal error:  Object of class foo could
       not be converted to string in filename on line n */
    ?>
    Chiar și cu __toString() obiectele nu pot fi utilizate ca indici ai tabloului sau chei. S-ar putea să adăugăm ulterior susținerea încorporată a hash-urilor pentru aceasta, însă în PHP 5.2.x va trebui sau să creați propria funcție hash, sau să utilizați noua funcție SPL spl_object_hash(). Din metodele __toString() nu pot fi aruncate excepții.
    <?php
    class foo {
        public function 
    __toString() {
            throw new 
    Exception;
        }
    }

    try {
        print new 
    foo;
        
    /* Fatal error:  Method foo::__toString() must
           not throw an exception in filename on line n */
    } catch(Exception $e) {}
    ?>
  • Au fost abandonate funcțiile de clasă statice abstracte. Din cauza unei scăpări, PHP 5.0.x și 5.1.x permiteau funcții abstracte statice în clase. Începând cu PHP 5.2.x, numai interfețele le pot avea.
    <?php
    abstract class foo {
        abstract static function 
    bar();
        
    /* Strict Standards:  Static function foo::bar()
        should not be abstract in filename on line n */
    }
    ?>
  • Extensia Oracle necesită prezența a cel puțin Oracle 10 pe Windows.
  • A fost adăugată susținerea RFC2397 (fluxurile data:). Introducerea schemei URL 'data' poate duce la o schimbare în comportament sub Windows. Dacă lucrați cu un sistem de fișiere NTFS și utilizați meta-fluxurile în aplicația dumneavoastră, și dacă se întâmplă să utlizați un fișier cu denumirea 'data:', accesat fără informația despre cale - aceasta nu va mai funcționa. Pentru a corecta aceasta, utilizați protocolul 'file:' pentru a-l accesa. Accesați de asemenea » RFC 2397
    <?php
    /* when allow_url_include is OFF (default) */
    include "data:;base64,PD9waHAgcGhwaW5mbygpOz8+";
    /* Warning:  include(): URL file-access is disabled
       in the server configuration in filename on line n */
    ?>
  • Regresul în șabloanele glob() În versiunea 5.2.4 o corectare a unei probleme de securitate cauza un regres al șabloanelor de forma "/foo/*/bar/*". Începând cu versiunea 5.2.5 în loc de a emite o preîntâmpinare, funcția glob() va întoarce FALSE când restricțiile openbase_dir sunt încălcate.