PHP Digest No. 174 (del 10 al 24 de febrero de 2020)


Nueva selección con enlaces a noticias y materiales. En el tema: 5 nuevos RFC de PHP Internals, así como una propuesta para desarrollar el lenguaje y un par de prototipos de nuevas características en forma de solicitudes de grupo, una porción de herramientas útiles, videos, podcasts y mucho más.

¡Disfruta leyendo!



Noticias y lanzamientos



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