6 ms·
I have minimal exposure to PHP, but recently helped a friend out with a small project on the weekends, that someone else he knew had built. When I first saw th
by binarymax 14y ago
I have minimal exposure to PHP, but recently helped a friend out with a small project on the weekends, that someone else he knew had built. When I first saw the codebase I found a veritable mess of very unreadable unmaintainable code. No functions - no OOP of any kind - no separation of concerns - nothing reusable - SQL calls (probably vulnerable to injection) mixed with HTML - a hulking mess of spaghetti.
Can tools like these fix code like that, or at least help? It would have taken me about a day per page just to make it readable - and there were dozens of pages. I don't plan on going back into that minefield if I can help it, but it would be good to know in the future.
--EDIT-- Thanks for all the helpful replies. Luckily I'm pretty sure the project is behind me. Seeing that PHP reminded me of old bad ASP (pre .NET) - it was easy to get away with lots of really bad stuff (on error resume next anyone?). It makes me wonder if auto-refactoring spaghetti is a crackable problem. When I dared look I did see lots of things that I could have fixed with a little bash and sed, but of course I am human so I understand the 'intent' of the code. Fascinating stuff.
- ohwp 14y agoThose problems are not related to PHP but to inexperienced developers. Refactoring such code is always a pain. So unless there is nice money involved: don't refactor, just fix what's broken. I don't think refactoring of spaghetti can be automated. But there are other tools that can help you to find bad code. Some that come in mind: https://github.com/fabpot/PHP-CS-Fixer http://pear.php.net/package/PHP_CodeSniffer/redirected Those tools are used for coding standards (PSR-x), but those standards are also helpful to track down bad code.
- itafroma 14y agoGood advice, with a couple of caveats about PSRs: - They're not all about coding standards: only two of them are. PSR-0 is a class autoloading standard and PSR-3 is a common interface for loggers. The next PSR is likely going to be a common caching interface. - PSR-1 and PSR-2 are controversial (although PSR-1 less so than PSR-2), and don't necessarily represent best practices amongst the larger PHP community. They're useful insofar as the PHP Framework Interoperability Group (PHP-FIG, http://www.php-fig.org/ http://www.php-fig.org/), the people crafting the PSRs, needed an internal standard and really shouldn't be represented as anything more than that. Much of both standards are an amalgam of individual practices produced via an internal survey of PHP-FIG member projects. If you have nothing, PSR-1 and PSR-2 aren't bad places to start, but diverging from them is more likely to happen than not, especially if you're working with projects or teams that have existing coding standards.
- h2s 14y ago> PSR-1 and PSR-2 are controversial > Much of both standards are an amalgam of individual > practices produced via an internal survey of PHP-FIG > member projects. Those member projects include codebases like Zend Framework, Symfony, Composer and Doctrine. Those standards are are a very accurate representation of the way the best, most popular open source PHP code is being written. The only controversy I'm aware of is those petty pull requests opened by people who didn't like that they chose spaces over tabs, which eventually drove one of the founders of the group to quit out of frustration.
- itafroma 14y ago> Those standards are are a very accurate representation of the way the best, most popular open source PHP code is being written. PHP-FIG members have repeatedly cautioned[1][2][3][4] that the PSRs (notably PSR-2) are not a set of best practices, but merely a survey of commonalities of PHP-FIG member projects. Even then, several member projects do not, and have stated they will not, implement PSR-1 and/or PSR-2. Treating them as the best or most accurate representation of how PHP is being developed at large is exactly the wrong thing to take away from the PSR process. [1]: http://www.php-fig.org/faq/ http://www.php-fig.org/faq/ [2]: http://paul-m-jones.com/archives/2420 http://paul-m-jones.com/archives/2420 [3]: https://groups.google.com/d/msg/php-fig/TRpoq0kdrZk/OkyD-J4uz8sJ https://groups.google.com/d/msg/php-fig/TRpoq0kdrZk/OkyD-J4u... [4]: Matthew Weier O'Phinney's comment on http://brian.moonspot.net/php-coding-standards http://brian.moonspot.net/php-coding-standards
- deleted 14y ago[deleted]
- beberlei 14y agoCurrently the refactoring available for extracting code is "extract method". "extract function" is not available yet and may even be implemented as "extract static class" or something, because it may be safer to achieve.
- mootothemax 14y agoCan tools like these fix code like that, or at least help? If you're working with PHP professionally, invest in PHPStorm. The time savings it brings - not to mention, the improved reliability - make it an instant win.
- pytrin 14y agoHow is it better than Netbeans or Eclipse? I've been using mostly the former (after Zend Studio went AWOL). How does PHPStorm compare to those alternatives?
- mootothemax 14y agoHow is it better than Netbeans or Eclipse? It's been a couple of years since I last looked at Netbeans/Eclipse, so take this with a grain of salt: PHPStorm just works. The biggest issues I used to have were finding Netbeans very slow, and auto-complete in both Netbeans and Eclipse being somewhat unreliable - great when they worked, but that wasn't 100% of the time. Essentially, PHPStorm is what I always wanted Netbeans/Eclipse to be. As I say, though, it's been a long time since I last looked, and that's for a very good reason: at long last, I'm completely satisfied with my IDE.
- pytrin 14y agoThanks, checking out their free trial now
- dmiladinov 14y agoPHPStorm is like the perfect gateway drug. I first became familiar with JetBrains products through PHPStorm, but have since upgraded to IntelliJ IDEA. IntelliJ IDEA is the perfect polyglot IDE, with support for the following either in-built or via plugin (and forgive me if I leave anything out, or add it in a reply): - Java - Scala - Clojure - Android - PHP - html/css/javascript - Python/Django - Ruby/Rails - Groovy/Grails - Actionscript/Flex I'm a raving fan!
- 14y ago
- Udo 14y ago> It makes me wonder if auto-refactoring spaghetti is a crackable problem I'm not sure it should be. It would probably still be a mess, just hidden and split over multiple source files. It's not PHP's fault, mind you. PHP pays the price for its own success here, meaning that lots of inexperienced hacks think they can code a web application, leaving behind these steaming piles of suck. It's also important to note that PHP is just a language, not a framework - as such it leaves unskilled "developers" a lot of rope to hang themselves with. You could in theory code the same nightmare you're describing with, say, Ruby on Rails. But in practice that doesn't happen because Ruby has a different clientele and Rails gives people a somewhat reasonable structure they can cling to. I do a lot of my development with PHP, it's a quite capable language. My biggest gripe with it is actually its syntax and uneven naming schemes for internal libraries. But the runtime itself is quite good and it is possible to do some very elegant things with it.
- kbenson 14y ago> I do a lot of my development with PHP, it's a quite capable language. My biggest gripe with it is actually its syntax and uneven naming schemes for internal libraries. But the runtime itself is quite good and it is possible to do some very elegant things with it. Indeed. I always wondered at how different the class syntax is from the rest of the language. In comparison to the rest of the language it looks... sane.