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