Hi internals, While some people are trying to make PHP a stricter language I'm also interested in making it a more flexible language by allowing to opt-in to advanced features for people who want it. Please don't shoot this down just because you are not the target audience of such a feature ;-)
Toying around with PHP 8 I noticed that it is now impossible to have methods which can be called both statically and in an object. This proposal brings back mixed mode methods both for extensions and a new syntax for user-land functions to explicitly allow it. Motivation: - Make migration of tried-and-tested mixed mode methods easier while having to explicitly declare it. So yes, unchanged code gets the new stricter semantics but updating code to the new (and from now on well-defined) behaviour can be done by simply extending the function definition. Having to rewrite such code to two different method names can be tedious and error-prone without big benefit. - Allowing mixed mode methods as a form of name-overload in cases having to have two separate names for static/non-static is a WTF. - Reviving things like $elements = DOMDocument::loadXML($html)->childNodes; instead of having to rewrite them to something like ($dom = new DOMDocument)->loadXML($html); $elements = $dom->childNodes; by adding ZEND_ACC_ALLOW_STATIC to the method signature (ext/dom/document.c currently still contains code to handle both cases). A first shot at an implementation was done using the syntax ?static and using isset($this) to determine the current mode: class A { var $dynamic = 'dynamic'; ?static function mixedmodefn() { return isset($this) ? $this->dynamic : 'static'; } } allowing both (new A)->mixedmodefn() and A::mixedmodefn(). The implementation (including a test) can be found at https://github.com/php/php-src/compare/master...chschneider:optional_static If people are interested I could create an RFC for this. Regards, - Chris -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php