[PHP] Weitere Neuerungen in PHP 5.4

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Murdoc, 28. November 2011 .

Schlagworte:
  1. 28. November 2011
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    Weitere Neuerungen in PHP 5.4

    NULL-Bytes waren gestern
    ja, nach vielen vielen jahren von SSI und den resultierenden defaces/hacks haben sich die php-entwickler dazu entschieden, diese bösen NULL-bytes zu ignorieren.

    d.h. file_exists() und konsorten winken /etc/passwd%00.php nicht mehr durch, sondern liefern FALSE bzw. schmeißen mit fehlermeldungen umsich.

    PHP:
    print  file_exists ( '/etc/passwd\0.php'
      ? 
    'gefunden' 
      
    'nicht gefunden' ;

    // nicht gefunden
    array/object access on instantiation

    PHP:
    $res  = (new  ClassName ())-> member ;
    $res  = (new  ClassName ())-> method ();
    $res  = (new  ClassName ())[ 'array-access' ];  // ArrayAccess muss implementiert sein
    neuer typehint "callable"

    jeder programmierer kennt die situation:
    PHP:
    function  foo ( $bar ) {
      if (!
    is_callable ( $bar ))
        throw new 
    InvalidArgumentException ( "..." );

      return 
    $bar ();
    }
    jetzt gehts einfacher:
    PHP:
    function  foo (callable  $bar ) {
      return 
    $bar ();
    }
    wer also noch klassen/interfaces mit namen "callable" rumliegen hat sollte sich jetzt gedanken machen

    binary int notations

    PHP:
    $zehn  0b1010 ;

    ---------------------------------

    folgende sachen werden noch kommen, es ist aber noch nicht sicher ob es in php 5.4 der fall sein wird.

    string, int, real, bool [...] sind nun reserviert

    d.h. es ist nun nicht mehr möglich eine klasse namens "string" (groß/klein egal) zu erstellen.

    PHP:
    class  String
    {
      
    // ich bin nicht java!
    schmeißt nun einen fehler "unexpected 'string'" (o.ä)

    "PHP" namensraum wurde reserviert

    der namensraum (namespace) PHP ist nun für php-interne klassen und funktionen reserviert und kann nicht erweitert werden.

    PHP:
    namespace  PHP ;

    function 
    foo () {}
    beendet das script, da der namensraum PHP nicht erweitert werden kann.

    verkürzte schreibweise für arrays

    PHP:
    $foo  = [];  // array()
    $bar  = [ 'foo' 'bar' ];  // array('foo', 'bar')
    $baz  = [ 'foo'  =>  'bar' ];  // array('foo' => 'bar')
    direkter zugriff auf arrays

    PHP:
    print array( 1 , 2 , 3 , 4 )[ 0 ];  // 1
    print [ 1 , 2 , 3 , 4 , 5 ][ 1 ];  // 2
    Bild
     
  2. 28. November 2011
    AW: Weitere Neuerungen in PHP 5.4

    Binary int notations? Bald bessere Typisierung?
     
  3. 28. November 2011
    AW: Weitere Neuerungen in PHP 5.4

    zu hex, octal und dezimal kam nun auch binär dazu.

    hex: 0x123456789ABCDEF
    octal: 01234567
    dezimal: 1234567890
    binär: 0b10101010

    eine bessere typisierung existiert nicht, is aber mmn. auch nicht notwenig.
    bisher gibt es "object", "array", "callable" und "ClassName" als parameter-typehints.

    diskutiert werden noch weitere varianten (wie z.b. function foo(string $bar) {})

    PHP: rfc:typechecking
     
  4. 28. November 2011
    AW: Weitere Neuerungen in PHP 5.4

    Wenn aber if('1' == 1) nicht true wäre, könnte man sich einiges an Arbeit sparen. Oder sehe ich das falsch?
     
  5. 28. November 2011
    AW: Weitere Neuerungen in PHP 5.4

    dafür gibt es schon seit jahren ===

    PHP:
    if ( '1'  ===  1 ') { /* false */ }
     
  6. 29. November 2011
    AW: Weitere Neuerungen in PHP 5.4

    Hmm toll, sonst findet man ja leider wenig konstruktives mehr in diesem Forum.

    Jedenfalls finde ich die binary notation echt praktisch ... Grade gestern wieder benötigt
    PHP:
    $subnetz  bindec ( '11111111111111111111111100000000' );
    Aufjedenfall eine Bereicherung.

    Mit den 0 Bytes kann man drüber streiten... Ich halte sowas für das nächste "magic_quotes" aber nunja..

    Und Klassenmethoden während der Instanzierung halte ich auch für praktisch. Insbesondere bei method chaining.
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.