{"id":1445,"date":"2012-09-29T10:23:36","date_gmt":"2012-09-29T08:23:36","guid":{"rendered":"https:\/\/sgaul.de\/?p=1445"},"modified":"2014-03-13T21:34:47","modified_gmt":"2014-03-13T20:34:47","slug":"php-coding-guidelines-php-framework-interop-group","status":"publish","type":"post","link":"https:\/\/sgaul.de\/2012\/09\/29\/php-coding-guidelines-php-framework-interop-group\/","title":{"rendered":"PHP-Coding-Guidelines: PHP Framework Interop Group"},"content":{"rendered":"
Neben vielen weiteren hat PHP ein in meinen Augen besonders nerviges Manko: Es stellt keine Guidelines daf\u00fcr bereit, wie der geschriebene Code formatiert werden soll. F\u00fcr einen \u00dcberblick habe ich vor l\u00e4ngerer Zeit schon einmal die Vorgaben gro\u00dfer Projekte verglichen<\/a>. Viel interessanter scheint jedoch der Ansatz der\u00a0PHP Framework Interop Group<\/a> zu sein, die ein ganzes B\u00fcndel von Empfehlungen f\u00fcr Webentwickler geschn\u00fcrt hat. Viele bekannte Projekte wie Zend Framework, PEAR, phpBB, Joomla und Drupal sind daran beteiligt.\u00a0<\/p>\n Auf der Projektseite werden drei zentrale Dokumente bereitgestellt, die durch GitHub versioniert werden und verschiedenartige Vorgaben liefern.<\/p>\n Dieses Dokument beschreibt, wie Namespaces und Klassennamen zu w\u00e4hlen sind. Anhand dieser Vorgaben l\u00e4sst sich ein Autoloader definieren, der automatisch alle ben\u00f6tigten Klassen nachl\u00e4dt.<\/p>\n In diesem Schriftst\u00fcck finden sich die grundlegenden Coding-Standards. Eine Datei muss UTF-8-kodiert sein, PHP-Bereiche werden durch <?php oder <?= eingeleitet. F\u00fcr zentrale Konzepte gibt es hier Vorgaben zur Schreibweise:<\/p>\n Zudem wird festgelegt, dass eine Datei entweder Symbole (wie Klassen, Funktionen) definiert oder Seiteneffekte (Ausgaben erzeugen u. \u00e4.) hat – niemals jedoch beides.<\/p>\n PSR-2 geht ins Formatierungsdetail und h\u00e4lt fest beispielsweise fest, wie Klammern auszurichten sind:<\/p>\n Zudem wird genau beschrieben, was etwa passiert, wenn z.B. eine Methodendefinition die maximale Zeilenl\u00e4nge von 120 \u00fcberschreitet.<\/p>\n Die von mir angesprochenen Details sind lediglich Ausschnitte. Das Projekt scheint noch in Bewegung zu sein, dennoch wirken die Vorgaben sehr durchdacht und auch f\u00fcr die meisten Spezialf\u00e4lle ger\u00fcstet. Durch die vielen Beispiele l\u00e4sst sich der Stil auch ohne langes Lesen einfach adaptieren. Jeder PHP-Entwickler sollte mal einen Blick darauf werfen.<\/p>\n","protected":false},"excerpt":{"rendered":" Neben vielen weiteren hat PHP ein in meinen Augen besonders nerviges Manko: Es stellt keine Guidelines daf\u00fcr bereit, wie der geschriebene Code formatiert werden soll. F\u00fcr einen \u00dcberblick habe ich vor l\u00e4ngerer Zeit schon einmal die Vorgaben gro\u00dfer Projekte verglichen. Viel interessanter scheint jedoch der Ansatz der PHP Framework Interop Group zu sein, die ein ganzes B\u00fcndel von Empfehlungen f\u00fcr Webentwickler geschn\u00fcrt hat.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[91],"tags":[293,527,41],"_links":{"self":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/1445"}],"collection":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/comments?post=1445"}],"version-history":[{"count":9,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/1445\/revisions"}],"predecessor-version":[{"id":1454,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/1445\/revisions\/1454"}],"wp:attachment":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/media?parent=1445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/categories?post=1445"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/tags?post=1445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}PSR-0: Autoloading Standard<\/a><\/h2>\n
PSR-1: Basic Coding Standard<\/a><\/h2>\n
ClassName\r\nCONSTANT_NAME\r\nmethodName<\/pre>\n
PSR-2: Coding Style Guide<\/a><\/h2>\n
ClassName\r\n{\r\n function methodName()\r\n {\r\n if (true) {\r\n functionName();\r\n } else {\r\n functionName($arg1, $arg2);\r\n }\r\n }\r\n}<\/pre>\n
ClassName\r\n{\r\n function tooLongMethodName(\r\n $one,\r\n $argument,\r\n $per,\r\n $line\r\n ) {\r\n \/\/ ...\r\n }\r\n}<\/pre>\n
Klar formuliert und umfangreich<\/h2>\n