Forum und email

Terugwaardse Incompatibiliteit Veranderingen

Ondanks de meeste bestaande PHP 4 code zou moeten werken zonder veranderingen, kan je best aandacht besteden aan volgende terugwaardse incompatibiliteit veranderingen:

  • strrpos() en strripos() gebruiken nu de hele string als een needle.
  • Illegaal gebruik van deze string offsets veroorzaakt E_ERROR in de plaats van E_WARNING.
  • array_merge() is veranderd om enkel arrays te aanvaarden. Als een niet-array variable wordt gepassed, zal een E_WARNING geworpen worden voor elk zo'n parameter. Wees voorzichtig omdat je code E_WARNING kan geven uit het niets.
  • PATH_TRANSLATED server variabele wordt niet langer uitdrukkelijk geset onder Apache2 SAPI in kontrast met de situatie in PHP 4, waar het is geset naar dezelfde waarde als de SCRIPT_FILENAME server variable wanneer het niet populated wordt door Apache. Deze verandering is doorgevoerd om to overeen te stemmen met de » CGI specificatie. Refereer a.u.b naar » bug #23610 voor meer informatie.
  • De T_ML_CONSTANT constant is niet langer gedefinieerd door de Tokenizer extensie. Als error_reporting is geset op E_ALL, zal PHP een notice genereren. Hoewel de T_ML_CONSTANT nooit werd gebruikt, was het gedefinieerd in PHP 4. In zowel PHP 4 en PHP 5 worden // en /* */ omgezet als de T_COMMENT constant. Niettemin PHPDoc stijl comments /** */ , die vanaf PHP 5 worden geparsed door PHP, herkend worden als T_DOC_COMMENT.
  • $_SERVER zou nooit bezaaid mogen worden met argc en argv als variables_order "S" bezit. Als je een systeem hebt dat specifiek geconfigureerd is om geen $_SERVER te maken, dan moet het er uiteraard niet zijn. De verandering was om argc en argv altijd beschikbaar te maken in de CLI versie onafhankelijk van de variables_order setting. Gelijkaardig, zal de CLI versie nu altijd bezaaid worden met de globale $argc en $argv variabelen.
  • Een object met geen properties wordt niet langer beschouwd als "empty".
  • Classes moeten gedeclareerd worden voor gebruik.

Example#1 strrpos() en strripos() gebruiken nu de gehele string als naald.

<?php
var_dump
(strrpos('ABCDEF','DEF')); //int(3)

var_dump(strrpos('ABCDEF','DAF')); //bool(false)
?>

Example#2 Een object zonder properties wordt niet langer beschouwd als "empty".

<?php
class test { }
$t = new test();

var_dump(empty($t)); // echo bool(false)

if (!$t) {
    
// Will be executed
}
?>

Het volgende voorbeeld was geldig in PHP 4, maar in PHP 5 zal het een fatal error produceren.

Example#3 Classes moeten gedeclareerd worden voor gebruik

<?php
$test 
= new fubar();
$test->barfu();

class 
fubar {
    function 
barfu() {
        echo 
'fubar';
    }
}
?>