#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 + Multi-Zitat Zitieren
#2 28. November 2011 AW: Weitere Neuerungen in PHP 5.4 Binary int notations? Bald bessere Typisierung? + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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? + Multi-Zitat Zitieren
#5 28. November 2011 AW: Weitere Neuerungen in PHP 5.4 dafür gibt es schon seit jahren === PHP: if ( '1' === 1 ') { /* false */ } + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren