Edit report at https://bugs.php.net/bug.php?id=40837&edit=1
ID: 40837 Comment by: jpmarois at hotmail dot com Reported by: nick dot telford at gmail dot com Summary: static and non-static functions can't have the same name Status: Not a bug Type: Bug Package: Class/Object related Operating System: Irrelevant PHP Version: 5.2.1 Block user comment: N Private report: N New Comment: ahar...@php.net: Sure, go Microsoft's way and move forward by staying behind for the sake of "compatibility". Please explain why, "As of PHP 5.3.3, methods with the same name as the last element of a namespaced class name will no longer be treated as constructor.". If PHP wont even initialize a "compatible" PHP 4 class anymore, how is it relevant to preserve instance methods being called statically? Previous Comments: ------------------------------------------------------------------------ [2012-09-11 01:59:54] ahar...@php.net It breaks compatibility with any PHP 4 compatible code that uses static method calls. That's (obviously) less important than it once was, but there's still plenty of legacy code out there. ------------------------------------------------------------------------ [2012-09-10 15:29:23] mac at macnewbold dot com ahar...@php.net : What would the impacts be of deprecating static calls to non-static methods? They would seem to not make much sense, since any uses of $this inside the method (which would be pretty typical since it is a non-static method) would fail with "Fatal error: Using $this when not in object context". What is the value of being able to attempt a static call on a non-static method? ------------------------------------------------------------------------ [2012-09-10 03:00:14] ahar...@php.net For the record, there's no way this can be implemented as it stands: for backward compatibility reasons, instance methods can be called statically, so the name has to be distinct to disambiguate between static and instance methods. The call type is not enough. ------------------------------------------------------------------------ [2012-09-07 22:33:55] accounts dot php at nickawilliams dot com I also support this proposal. On numerous occasions throughout my career writing PHP I have found a need for this. While there are workarounds that work, they are all fairly verbose, convoluted, and/or difficult to follow. Please consider reopening this! ------------------------------------------------------------------------ [2012-08-04 00:46:35] billco at fnarg dot com Same here! This is a very useful pattern in other languages, where the same method name can be used in both static and non-static contexts. For example, a search() method in static context could create a new result object, while the non-static form would search within an existing result set. While it is possible to mimic this sort of behaviour by first creating a "blank" object, it leads to dual-purpose methods (a big "if" statement), resulting in messy, unmaintainable code. Why arbitrarily force developers to violate good OOP practices ? ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=40837 -- Edit this bug report at https://bugs.php.net/bug.php?id=40837&edit=1