PHP Digest Nr. 174 (10. - 24. Februar 2020)


Neue Auswahl mit Links zu Nachrichten und Materialien. In der Ausgabe: 5 neue RFCs von PHP Internals sowie ein Vorschlag zur Entwicklung der Sprache und einige Prototypen neuer Funktionen in Form von Poolanforderungen, ein Teil nützlicher Tools, Videos, Podcasts und vieles mehr.

Viel Spaß beim Lesen!



Nachrichten und Veröffentlichungen



PHP Internals


  • Language evolution — , PHP , . , -.
  • : [RFC] Variable Syntax Tweaks, [RFC] Static return type, [RFC] Allow ::class on objects
  • [RFC] Write-Once Properties — , , . , : final, immutable, readonly, writeonce, locked, sealed.
    class Foo
    {
        <keyword> public int $a = 1;
        <keyword> public string $b;
        <keyword> public array $c = ["foo"];
        <keyword> public object $d;
    
        public function __construct()
        {
            $this->b = "foo";
        }
    }
    
    $foo = new Foo();
    
    $foo->a = 42;		// EXCEPTION: property a has already been initialized
    $foo->b = "bar";	// EXCEPTION: property b has already been initialized
    $foo->a++;		    // EXCEPTION: incrementing/decrementing is forbidden
    unset($foo->c);		// EXCEPTION: unsetting is forbidden
    $foo->c[] = "bar";	// EXCEPTION: arrays can't be modified
    $var= &$this->c;	// EXCEPTION: reference isn't allowed
    
    $foo->d = new Foo();	// SUCCESS: property d hasn't been initialized before
    $foo->d->foo = "foo";	// SUCCESS: objects are still mutable internally
    

    . , , , , , .
  • [RFC] str_containsstr_contains(string $haystack , string $needle) :bool, , strpos() strstr().
  • [RFC] Object-based token_get_all() alternativetoken_get_all(), PhpToken.
  • [RFC] get_debug_type — : gettype() get_class().
  • [RFC] Allow explicit call-site pass-by-reference annotation — RFC . . , . , .
    declare(require_explicit_send_by_ref=1);
    
    function byRef(&$ref) {...}
    byRef(&$var);
    
  • [Pre-RFC] Add support for «decorator» pattern — «» PHP.
    interface Foo {
        public function method1(int $a): void;
        public function method2(): int;
        public function method3(string $b): string;
        public function method4(): stdClass;
        // ...
    }
    
    class ComposedFoo implements Foo {
        private decorated Foo $inner;
        public function __construct(Foo $inner) { $this->inner = $inner; }
        public function method4(): stdClass {
            return $DO_SOMETHING_DIFFERENT_HERE;
        }
    }
    
    /*
       decorated,  ,    
          Foo,      
      .      ,  
       .
    */
    
  • [PR] Use serialize_precision for printing floats in var_dump() — , float var_dump() (0.1 + 0.2 === 0.30000000000000004):
    
    // 
    $sum = 0.1 + 0.2;
    var_dump($sum); // float(0.3)
    var_dump($sum == 0.3); // bool(false) WTF???
    
    // 
    $sum = 0.1 + 0.2;
    var_dump($sum); // float(0.30000000000000004)
    var_dump($sum == 0.3); // bool(false) Makes sense...
    



Symfony



Laravel



Yii



Async PHP





/



!

— , , .
.

Telegram- PHP Digest.

— GitHub.

: PHP- № 173


All Articles