Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:98102 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 54469 invoked from network); 31 Jan 2017 23:27:39 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 31 Jan 2017 23:27:39 -0000 Authentication-Results: pb1.pair.com header.from=cmbecker69@gmx.de; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=cmbecker69@gmx.de; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmx.de designates 212.227.17.22 as permitted sender) X-PHP-List-Original-Sender: cmbecker69@gmx.de X-Host-Fingerprint: 212.227.17.22 mout.gmx.net Received: from [212.227.17.22] ([212.227.17.22:58010] helo=mout.gmx.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 7E/EE-51557-A6D11985 for ; Tue, 31 Jan 2017 18:27:39 -0500 Received: from [192.168.2.109] ([217.82.225.171]) by mail.gmx.com (mrgmx101 [212.227.17.168]) with ESMTPSA (Nemesis) id 0LrJTs-1cTQz31o0i-013AVM; Wed, 01 Feb 2017 00:27:33 +0100 To: Levi Morrison , "guilhermeblanco@gmail.com" References: Cc: PHP internals Message-ID: Date: Wed, 1 Feb 2017 00:27:57 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Provags-ID: V03:K0:K/F7B9Mejr33+dqCxF9sa2OJUte53O0bFcV5hO4Funy05HP8ZeR 1q91KtkzBkVnl7H4Qki7YpZ8gvmB/Z4H6YHO9kDX8/+SLKg/1ZFSOg8cpX2vP3ew3//KBIe xZxm2Uftyq9B08aFRn3eaanL4IkdyA1Ww7r9nl/b1LfSGmabg0bvjG139aPi2U252ToNaG7 GcBANtF5Pfstqj7b9CQtg== X-UI-Out-Filterresults: notjunk:1;V01:K0:dP6sw/LKsE8=:LLsAf/XJXoYlTAkFd4DTx9 xxs2ct0bZD/eXLM+bsymsaa2ZRvtCWvdtfsKZPbibe9mxW/XXSi7W0g+cwFztrlBfPj2ySM5R 3cNkkiFnHrUQG3aGP19k5aMJfYHAqzKLUj3bFE9SC9Hp8sqWREnR+mZ0EY7LRk2nA7bevMNzA ed2eoDhilyTFlI+RZYq72yHuhZ2AiAthYUvRe35VdJDnSp0oGFtooKtfFH9f4VxZX+FoNCunJ jnQBoAwtZYAJs0Bm4XcwvuJbwxbaWhuyyA8SKctPNLew7zuZOZmjySRZAqcKJbblfJLESa4og Wkmb8khKjBkzIKpo0uXipxsJSK6NoX0ZYnemYwLY9Sf3xc3pylayFnZ+rKs6UhY9WJo94uk06 mX34sqLxNa+bIOmhmb1XTps3Pqo9IqK9QwzJR4/LdYnm9CWTtJpRAla7njqIoJpDKFlyroFzn kbmDONRjqtrssdaYDj+zPy1HCD/PG65LHcbyZf+2qY765nIONvIgsAxFVg02CUrUgmvaAyTBE CzYSU2oZMEbJqloYTQSGvEWOxC2JIU16+t103VMdUdtvxpK4yp2NqVsbjM4t5vtqIPhsU6pcN dh9W56ePo/oqmJLPuBJP0m3JZV720gFbH/tBe+JExKfKpRjYd/bDZhWEhTISn/yYlPvy+kx91 jA1OQuZ2JmiWp9pYtRpp54Vu5pcxJOsQPDf3E/asWpPasp6vXNghVYO7hnefvZYqlNaji77rc 7kLPh5NRjsjWHwzeuDR1cRdPKDoMq1JDo3OxPOZZJA6oK9ducXK8SoT8Zb273YqXh+MrDrcFX TqLcmMxdpKudbJX8otakzgRVpkEsVHfN0+4PcFe4WJg4aLJdD2+lkDpFnl36a/dauGD6doUHT jY+HMws0kRwVnVaG0r2BUFMJqmOSRNtEm5qUt960i0O+Y1ER/2IvoYbEVG1K1CaLARj0ax/Vp qvC/IamJdWV811e5DLYpRl+CM4JI9HoJxO4Hk7tBdhp4rnmduWa4EaHQOoerrrWnp0UjnzEhm gubQZ09CDV6FsN1zXYlckGEbAggaoOsYshKoUwMG+QSSwRrd4WofrGPP779UlWREAw== Subject: Re: [PHP-DEV] PHP's support to contravariance and covariance From: cmbecker69@gmx.de ("Christoph M. Becker") On 31.01.2017 at 21:47, Levi Morrison wrote: >> Is there anything else that I am missing? > > Sadly, yes. Consider the following snippet: > > class A { > function method(): B; > } > > class B extends A { > function method(): C; > } > > class C extends B {} > > When checking that B::method satisfies the requirements of A::method > it must know if C extends B. At the time we check if B::method > satisfies A::method, C will *not* yet be in the symbol table. > > You need to adjust the passes over the code to register symbols and > their declared relationships, and then in a separate pass validate > them. After that if the class isn't found then you trigger an > autoload. > > It's doable, it just hasn't been done. An alternative *might* be forward class declarations: class B extends A; class C extends B; class A { function method(): B; } class B extends A { function method(): C; } class C extends B {} I haven't really thought about the feasibility – just throwing in a rough idea. -- Christoph M. Becker