PHP Digest n ° 174 (10-24 février 2020)


Nouvelle sélection avec des liens vers des nouvelles et des documents. Dans le numéro: 5 nouveaux RFC de PHP Internals, ainsi qu'une proposition pour développer le langage et quelques prototypes de nouvelles fonctionnalités sous forme de requêtes de pool, une partie d'outils utiles, des vidéos, des podcasts et bien plus encore.

Bonne lecture!



Nouvelles et communiqués



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