PHP 5.6: highlights en wijzigingen

Artikel aangemaakt: 25-07-2016 | Artikel gewijzigd: 15-11-2016

PHP 5.6. levert een mooie performance winst op voor zowel geheugen als de processor. De wijzigingen zijn dan ook voornamelijk gericht op performance en niet zo zeer functionaliteit. Daarnaast zijn er diverse nieuwe functies beschikbaar. Toch moet je ook rekening houden met enkel zaken waarmee PHP 5.6. niet langer backwards compatible is.

Onderstaande vindt u een overzicht met de belangrijkste wijzigingen in PHP 5.6. ten opzichte van PHP 5.5.

 

  • Array keys worden niet langer overschreven wanneer men een array definieerd als een property van een class via een array literal.

    Voorbeeld;

    class {
        const 
    ONE 1;
        public 
    $array = [
            
    self::ONE => 'foo',
            
    'bar',
            
    'quux',
        ];
    }

    var_dump((new C)->array);


    Output PHP 5.5
    						array(2) {
      [0]=>
      string(3) "bar"
      [1]=>
      string(4) "quux"
    }

    Output PHP 5.6.
    						array(3) {
      [1]=>
      string(3) "foo"
      [2]=>
      string(3) "bar"
      [3]=>
      string(4) "quux"
    }
  • json_decode() strictheid; json_decode() geeft voortaan altijd in kleine letters true, false, of null terug. Voorheen was het resultaat gedeeltelijk  of geheel in hoofdletters.
  • Stream wrappers verifieren voortaan standaard peer certificaten en host names when men SSL/TLS gebruikt. In de meeste gevallen blijft code gewoon werken, hoewel het peer certificaat dus wel wordt gecontroleerd.
  • GMP resources zijn voortaan objecten. De funtionele API implementatie in de GMP extensie is niet gewijzigd, waardoor code ongewijzigd zou moeten werken tenzij expliciet is_resource() wordt gebruikt.
  • Mcrypt_encrypt(), mcrypt_decrypt(), mcrypt_cbc(), mcrypt_cfb(), mcrypt_ecb(), mcrypt_generic() en mcrypt_ofb() accepteren niet langer keys of IVs van een incorrecte grootte en block cipher modes die IV's vereisen geven een foutmelding wanneer de IV niet wordt opgegeven.
  • cURL file uploads; uploadscripts die gebruik maken the @file syntax vereisen de instelling CURLOPT_SAFE_UPLOAD = FALSE. in plaats hiervan zou CURLFile gebruikt moeten worden.

    Alle backwards incompatible commando's terug lezen.

Nieuwe functies zijn uiteraard ook aanwezig, maar deze hebben geen impact op uw bestaande code. Wilt u alle nieuwe functies doornemen? Kijk dan op PHP.net.

Functies welke binnenkort gaan vervallen (deprecated functies in PHP 5.6.), maar nog wel funcioneren in deze versie;

  • Calls vanaf incompatible context zijn vanaf PHP 5.6. deprecated. Dit betekend dat je niet langer E_STRICT als foutmelding krijgt, maar E_DEPRECATED. Support voor deze functies worden niet langer ondersteund in de volgende versie van PHP.

    Voorbeeld:
    class {
        function 
    f() { echo get_class($this); }
    }

    class 
    {
        function 
    f() { A::f(); }
    }

    (new 
    B)->f();

    Output:
    Deprecated: Non-static method A::f() should not be called statically,
    assuming $this from incompatible context in - on line 7
    B
Gewijzigde functies;
  • crypt() genereerd een E_NOTICE error als de salt parameter wordt gebruikt.
  • substr_compare() accepteerd nu 0 als lenght parameter. 
  • unserialize()
  • Diverse andere wijzigingen welke minder gebruikt worden zijn te vinden via PHP.net
Afzender:
Ontvanger: