PHP Digest # 203 (May 1 - 17, 2021)



Property accessors, type intersections, and final constants are officially proposed for PHP 8.1, and two more RFCs have already been adopted. Also in the release are a portion of tools, videos, podcasts, articles, community news.



Enjoy reading!





news



  • PHP 7.4.19 , PHP 8.0.6 - Fixed bug in PDO_pgsql.
  • PHP version statistics - 2021.1 - Traditional collection of statistics based on the data that Composer sends when connecting to packagist.org.



    • PHP 7.4: 45.92% (+3.31)
    • PHP 7.3: 21.30% (-5.75)
    • PHP 7.2: 12.89% (-2.39)
    • PHP 8.0: 9.44% (+9.17)
    • PHP 7.1: 5.21% (-2.24)


  • Phalcon Roadmap — , v5 . : PHP + . PHP, .
  • :



    phpcommunity.ru.



PHP Internals



  • check [RFC] Namespaces in bundled PHP extensions



    PHP! (, ..) .



    . resource



    PHP - . , PHP 8.1 :



    IMAPConnection -> IMAP\Connection
    FTPConnection -> FTP\Connection
    LDAP -> LDAP\Connection
    LDAPResult -> LDAP\Result
    LDAPResultEntry -> LDAP\ResultEntry
    PgSql -> PgSql\Connection
    PgSqlResult -> PgSql\Result
    PgSqlLob -> PgSql\Lob
          
          





  • check [RFC] Add return type declarations for internal methods



    PHP 8.0 . . , .



    , . , .



    class SomeStandardClass
    {
        public function method(): int {}
    }
    
    class UserClass extends SomeStandardClass
    {
        public function method() {}
    }
    
    // Fatal error: Declaration of UserClass::method() must be compatible with SomeStandardClass::method()
    
          
          





    . PHP 8.1 . , Deprecation notice



    . PHP 9 Fatal error



    .



    class MyDateTime extends DateTime
    {
        public function modify(string $modifier) { return false; }
    }
    
    // Deprecated: Declaration of MyDateTime::modify(string $modifier) should be compatible with DateTime::modify(string $modifier): DateTime|false
    
          
          





  • [RFC] Property Accessors



    .



    . , __get



    __set



    . C#



    :



    class Foo {
        public $prop {
            get { /* ... */ }
            set { /* ... */ }
        }
    }
    
          
          





    readonly :



    class User {
        public string $name { get; }
    
        public function __construct(string $name) {
            $this->name = $name;
        }
    }
    
          
          





    , public/private :



    class User {
        public string $name { get; private set; }
    
        ...
    }
    
          
          





    :



    class Foo {
        public int $bar {
            get {
                error_log('Getting $bar');
                return $this->bar;
            }
            set {
                assert($bar > 42);
                $this->bar = $bar;
            }
        }
    }
    
          
          





    lazy



    guard



    PHP 8.1.



  • [RFC] Pure intersection types



    PHP 8.0 , RFC .



    TypeA&TypeB



    , instanceof TypeA



    instanceof TypeB



    .



    class A {
        private Traversable&Countable $countableIterator;
    
        public function setIterator(Traversable&Countable $countableIterator): void {
            $this->countableIterator = $countableIterator;
        }
    
        public function getIterator(): Traversable&Countable {
            return $this->countableIterator;
        }
    }
    
          
          





    pure intersection types, union . .

  • [RFC] Deprecate ticks



    PHP : declare(ticks=1);



    . pcntl. pcntl_signal()



    pcntl_async_signals()



    . PHP 8.1 PHP 9.

  • [RFC] Final class constants



    final



    , .



    class Foo
    {
        final public const X = "foo";
    }
    
    class Bar extends Foo
    {
        public const X = "bar";
    }
    
    // Fatal error: Bar::X cannot override final constant Foo::X
    
          
          





    RFC: .

  • PHP:













Symfony







Laravel







Yii













/







community



  • PHP - — Joe Watkins , PHP , .



    Laravel JIT :

  • 0xABADCAFE/php-demo-engine PHP. ASCII- .



  • remoteok.io index.php $101k .



    5 ؜:

  • PHP :

    $b = new class {
        function __destruct() {
            $GLOBALS['b'] = 2;
        }
    };
    
    $a = 1;
    $b = 1;
    var_dump($a + $b);
    // 3
    
          
          



    3v4l.org/WMfPP Alexander Lisachenko showed



    more black magic at PHP Russia 2019. And at PHP Russia 2021 we expect more PHP miracles from him .video






If you notice an error or inaccuracy, please let us know in a personal habr or telegram .

Subscribe to the PHP Digest Telegram channel .



Send link

Search links in all digests

Previous issue: PHP-Digest # 202








All Articles