PHP 5.4. is een belangrijke stap voorwaards in het efficienter en veiliger laten werken van programmatuur. In deze versie zijn diverse wijzigingen geweest waardoor code en functies anders werken of reageren. Wanneer u zelf software heeft ontwikkeld in het verleden kan het zijn dat u bepaalde functies gebruikt die in zijn geheel zijn vervallen.
Onderstaande vindt u een overzicht met de belangrijkste wijzigen in PHP 5.4. ten opzichte van PHP 5.3.
- Safe mode wordt niet langer ondersteund. Alle applicaties die van deze functie gebruik maken moeten worden aangepast (in termen van beveiliging).
- Magic quotes zijn vervallen. Applicaties die gebruik maken van deze functie moeten worden geupdate om beveiligingslekken te voorkomen. get_magic_quotes_gpc() en get_magic_quotes_runtime() geven nu altijd FALSE als antwoord. set_magic_quotes_runtime() veroorzaakt een E_CORE_ERROR level foutmelding wanneer deze Magic quote inschakelt.
- Register_globals en register_long_arrays zijn vervallen.
- Mbstring.script_encoding functies zijn vervallen. Gebruik zend.script_encoding in plaats van deze vervallen functies.
- Call-time pass by reference is vervallen.
- De break en continue statements worden niet langer geaccepteerd als variabelen argumenten. (vb: break 1 + foo() * $bar;). Statische argumenten zoals break 2; werken nog wel. Door een bijwerking zijn break 0; en continue 0; niet langer toegestaan.
- In de date and time extensie, kan de tijdzone niet langer worden ingesteld door gebruik te maken van de TZ variabele. In plaats daarvan dien je een tijdzone te specificeren door gebruik te maken van de date.timezone php.ini instelling of de date_default_timezone_set() functie. PHP zal niet langer de tijdzone proberen te raden en valt in plaats daarvan terug op de UTC tijdzone met een foutmelding E_WARNING.
- Niet numerieke strings Offsets - vb: $a['foo'] waar $a een string is - geeft nu flase terug op isset(), true op empty(), en genereert een E_WARNING wannneer je de string wilt gebruiken. Offsets van het type double, bool en null produceren een E_NOTICE. Numerieke strings zoals $a['2']) werken hetzelfde als voorheen. Houdt wel rekening met het feit dat offsets zoals '12.3' en '5 foobar' worden beschouwd als niet numeriek. Deze veroorzaken dan ook een E_WARNING, maar worden veranderd in 12 en 5 in verband met backward compatibility redenen. De volgende code geeft een ander resultaat afhankelijk van de PHP versie: $str='abc';var_dump(isset($str['x'])); // geeft false in PHP 5.4 en later, maar true bij PHP 5.3 of lager.
- Een array in een string veranderen resulteert in 5.4. in een E_NOTICE error, maar het resultaat zal nog steeds zijn dat er een string is met de waarde 'array'
- NULL, FALSE, of een lege string veranderen in een object door het toevoegen van een eigenschap veroorzaakt nu een E_WARNING foutmelding, in plaats van een E_strict.
- Parameternamen die een super global schaduwen veroorzaken een fatal error. Dit voorkomt code zoals foo($_GET, $_POST) {}.
- Salsa10 en Salsa20 hash algoritmes zijn vervallen.
- array_combine() geeft nu array() terug in plaats van FALSE wanneer 2 lege arrays worden meegegeven als parameters.
- Wanneer je htmlentities() gebruikt met een Asiatisch karakterset dan werkt dit als htmlspecialchars() - dit is niet anders dan in vorige versies van PHP, maar bijkomend krijg je nu een E_STRICT foutmelding.
-
De derde parameter van ob_start() is gewijzigd van boolean
erase
naar integerflags
. Houdt er rekening mee dat erase op FALSE zetten anders reageert in PHP 5.4. Gebruik dit voorbeeld dat compatible is met PHP 5.3 en PHP 5.4
De volgende woorden zijn vanaf heden gereserveerd en mogen niet meer gebruikt worden als namen van functies, classes, etc.
De volgende functies zijn vervallen:
- define_syslog_variables()
- import_request_variables()
- session_is_registered(), session_register() en session_unregister().
- De aliassen mysqli_bind_param(), mysqli_bind_result(), mysqli_client_encoding(), mysqli_fetch(), mysqli_param_count(), mysqli_get_metadata(), mysqli_send_long_data(), mysqli::client_encoding() and mysqli_stmt::stmt().