{"id":2037,"date":"2013-05-18T23:24:38","date_gmt":"2013-05-18T22:24:38","guid":{"rendered":"http:\/\/www.plagosus.net\/blog\/?p=2037"},"modified":"2013-05-18T23:24:38","modified_gmt":"2013-05-18T22:24:38","slug":"programerski-rukopis-ili-formatiranje-php-koda","status":"publish","type":"post","link":"https:\/\/www.plagosus.net\/blog\/dev\/php-programiranje\/programerski-rukopis-ili-formatiranje-php-koda\/","title":{"rendered":"Programerski rukopis ili formatiranje PHP koda"},"content":{"rendered":"<p style=\"text-align: justify;\">Kada sam pre mnogo godina pokrenuo ovaj blog, \u017eeleo sam da pi\u0161em o svemu sem o programiranju jer nisam \u017eeleo da smaram ljude stvarima koje i onako sami mogu nau\u010diti. Me\u0111utim, kako me sve \u010de\u0161\u0107e ljudi pitaju za savete, ve\u010dina tekstova o programiranju vezana je za re\u0161avanje nekih specifi\u010dnih problema koji se te\u0161ko ili uop\u0161te ne mogu na\u0107i na Internetu. Tako\u0111e se ispostavilo da je moja hipoteza pogre\u0161na i da ljudi jednostavno ne \u017eele \u010ditati savete dok im ne zagusti, a onda obi\u010dno bude kasno.<\/p>\n<p><a href=\"http:\/\/netbeansthemes.com\/solarized\/\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.plagosus.net\/blog\/wp-content\/uploads\/2013\/05\/Solarized.png\" alt=\"Solarized NetBeans Theme\" width=\"640\" height=\"360\" class=\"aligncenter size-full wp-image-2048\" srcset=\"https:\/\/www.plagosus.net\/blog\/wp-content\/uploads\/2013\/05\/Solarized.png 640w, https:\/\/www.plagosus.net\/blog\/wp-content\/uploads\/2013\/05\/Solarized-300x169.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Ovaj tekst namenjen je kako po\u010detnicima u programiranju, tako i onima koji su na PHP kodiranje pre\u0161li sa neke druge platforme, da ne ka\u017eem nekog drugog programskog jezika. Za razliku od npr C-a, u kome su programerske konvencije odavno definisane, a kasnije i Jave gde \u010dak nema ni varijacija na temu, PHP pi\u0161e kako ko ho\u0107e i kako kome odgovara, pa se do standardizacije do\u0161lo poprili\u010dno kasno. Toliko kasno, da na velikom delul projekata i dalje ne postoje jasno definisani standardi, od imenovanja promenljivih, preko fofrmatiranja samog koda, do organizacije klasa i hijerarhije fajlova unutar samog projekta.<\/p>\n<h2 style=\"text-align: justify;\">Oblik jednog PHP fajla<\/h2>\n<p style=\"text-align: justify;\">PHP fajl je fajl (ili datoteka) jednostavnog tekstualnog (<a href=\"http:\/\/en.wikipedia.org\/wiki\/Plain_text\" target=\"_blank\"><em>plain text<\/em><\/a>) tipa. Za programiranje u PHP-u nije vam neophodan nikakav skup program niti razvojno okru\u017eenje. Dovoljan je najjednostavniji tekst editor kao npr: Notepad, Gedit, Krite, vi&#8230; PHP kod unutar fajla <strong>po\u010dinje i zavr\u0161ava se punim &lt;?php tagovima<\/strong> i izbegavajte sve skra\u0107ene verzije. Tako\u0111e, ako u falu imate samo PHP kod, <strong>zatvoreni ?&gt; tag nije neophodan<\/strong> i preporu\u010duje se njegovo namerno izostavljanje kako ne bi dobijali bespotrebne beline koje mogu stvoriti <a title=\"Ispravljanje krive Drine \u2013 LAMP i problem sa belinama\" href=\"http:\/\/www.plagosus.net\/blog\/dev\/php-programiranje\/ispravljanje-krive-drine\/\">velike probleme koji se te\u0161ko otkrivaju<\/a>.<\/p>\n<p style=\"text-align: justify;\">[php]<br \/>\n&lt;?php<br \/>\n    phpinfo();<br \/>\n?&gt;<br \/>\n[\/php]<em id=\"__mceDel\"><\/em><em id=\"__mceDel\"><br \/>\n<\/em><\/p>\n<h2 style=\"text-align: justify;\">Du\u017eine linija tj redova koda<\/h2>\n<p style=\"text-align: justify;\">Za razliku od klasi\u010dnih (ni\u017eih) programskih jezika, gde su imena funkcija kratke jer ih generalno ima malo, PHP za skoro svaku sitnicu ima zasebnu funkciju koja se zove opisno i \u010desto sa punim nazivima. Samim tim, linije koda te\u0161ko je obuzdati u preporu\u010denim \u0161irinama do 80 karaktera, pa \u010dak i oni sa strogim preporukama za pisanje <em>old school<\/em> koda dozvoljavaju izuzetke. Budimo realni, niko vi\u0161e ne programira u \u0161irini do 80 karaktera. \u010cak ni Linux developeri koji pi\u0161u u konzoli koriste velike monitore. Se\u0107am se da sam programirao na maleckom EeePC-ju, pa sam izlazio iz okvira od 80 karaktera. Dakle <strong><a href=\"http:\/\/paul-m-jones.com\/archives\/276\" target=\"_blank\">trudite se da vam kod bude kra\u0107i od 80 karaktera<\/a>, ali ne pani\u010dite ako mora biti du\u017ei<\/strong>.<\/p>\n<h2 style=\"text-align: justify;\">Novi redovi i razli\u010dite platforme<\/h2>\n<p style=\"text-align: justify;\">Za kraj reda tj [enter] prati se UNIX konvencija i kraj reda treba da je <strong>jedan\u00a0<em>linefeed<\/em> (LF) karakter<\/strong> (za tehni\u010dare ASCII kod 10 ili heksadecimalno\u00a00x0A). Ne koristite Apple OS varijantu CR varijantu, ni Windows CRLF. Koji god operativni sistem da koristite, podesite editor na LF.<\/p>\n<h2 style=\"text-align: justify;\">Uvla\u010denje redova<\/h2>\n<p style=\"text-align: justify;\">Kako programeri za uvla\u010denje redova koriste TAB-ove \u010dije se du\u017eine u editorima mogu podesiti na razli\u010dite vrednosti, praksa je pokazala da se takav kod uvek raspadne. Zato je nepisano pravilo da se u editorima vrednost taba postavlja na <strong>4 spejsa<\/strong> i da se umesto tabova koriste spejsevi. Od masovnijih projekata WordPress preporu\u010duje da se na prvom mestu u liniji uvla\u010di tab-om, a za ostalo koristi spejs. U realnosti, koristite 4 spejsa, a kome treba druga\u010dije podesi\u0107e u editoru i automatski konverttovati.<\/p>\n<h2 style=\"text-align: justify;\">Pozivi funkcija<\/h2>\n<p style=\"text-align: justify;\">Tik uz uvla\u010denje redova, nalaze se i pozivi funkcija koji se \u010desto formatiraju po vertikalnoj liniji. Ako imate jedan poziv funkcije stavite po jedan spejs pre i posle znaka jednakosti tj dodele:<\/p>\n<p style=\"text-align: justify;\">[php]<br \/>\n$var = foo($bar, $baz, $quux);<br \/>\n[\/php]<\/p>\n<p style=\"text-align: justify;\">Ako imate blok koda sa vi\u0161e uzastopnih poziva funkcija, \u010ditljivost \u0107ete pove\u0107ati vertikalnim poravnanjem dodavanjem razmaka sa leve strane:<\/p>\n<p style=\"text-align: justify;\">[php]<br \/>\n$short\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = foo($bar);<br \/>\n$long_variable = foo($baz);<br \/>\n[\/php]<\/p>\n<p style=\"text-align: justify;\">Generalno, uvek stavljajte po jedan spejs pre i posle operatora pri dodalama i u logi\u010dkim izrazima, kao i spejs posle zareza u nabrajanju. Kao \u0161to bi ste i u obi\u010dnom pisanju teksta na ra\u010dunaru.<\/p>\n<h2 style=\"text-align: justify;\">Stringovi i navodnici<\/h2>\n<p style=\"text-align: justify;\">Velika polemika se vodila i oko upotrebe navodnika za stringove, kao naj\u010de\u0161\u0107i tip podataka. Za obi\u010dne stringove (koji ne sadr\u017ee nikakve promenljive) koristite jednostruke navodnike:<\/p>\n<p style=\"text-align: justify;\">[php]<br \/>\n$a\u00a0=\u00a0&#8216;Example String&#8217;;<br \/>\n[\/php]<\/p>\n<p style=\"text-align: justify;\">Za stringove koji u sebi ve\u0107 sadr\u017ee jednostruke navodnike, kao \u0161to su npr SQL upiti, koristite dvostruke navodnike:<\/p>\n<p style=\"text-align: justify;\">[php]<br \/>\n$q1 = &#8220;SELECT COUNT(user_id) FROM tbl_users&#8221;<br \/>\n     .&#8221;WHERE user_id = 1024 LIMIT 1;&#8221;;<br \/>\n[\/php]<\/p>\n<p style=\"text-align: justify;\">Za stringovi koji uklju\u010duju promenljive, tako\u0111e koristite dvostruke navodnike:<\/p>\n<p style=\"text-align: justify;\">[php]<br \/>\n$greeting\u00a0=\u00a0&#8220;Hello $name, welcome back!&#8221;;<br \/>\n[\/php]<\/p>\n<p style=\"text-align: justify;\">Za spajanje stringova u jeziku PHP koristi se ta\u010dka. Zbog bolje \u010ditljivosti koda, pre i posle ta\u010dke (izme\u0111u stringova i promenljivih) ostavljajte po jedan spejs:<\/p>\n<p style=\"text-align: justify;\">[php]<br \/>\n$poruka =\u00a0&#8216;Zdravo&#8217;\u00a0.\u00a0&#8216; &#8216;\u00a0.\u00a0&#8216;svete&#8217;;<br \/>\n[\/php]<\/p>\n<p style=\"text-align: justify;\">Kada su u pitanju nizovi, uvla\u010dite ih kao bilo koji drugi blok koda za jedan nivo, a ako je izvodljivo dr\u017eive klju\u010deve i vrednosti poravnate po vertikalnoj osi:<\/p>\n<p>[php]<br \/>\n$sampleArray = array(<br \/>\n    &#8216;firstKey&#8217;  =&gt; &#8216;firstValue&#8217;,<br \/>\n    &#8216;secondKey&#8217; =&gt; &#8216;secondValue&#8217;,<br \/>\n);<br \/>\n[\/php]<\/p>\n<h2>Kontrole tokova<\/h2>\n<p style=\"text-align: justify;\">Za IF iskaze uvek koristite viti\u010daste zagrade unutar blokova koda, \u010dak i ako je u bloku samo jedna komanda. Zagrade sa uslovom odvojite jednim spejsom od samih if\/else\/elseif klju\u010dnih re\u010di. Ako se desi da linija sa uslovima unutar if-a bude preduga\u010dka, prelomite je u vi\u0161e redova, sa odgovaraju\u0107im uvla\u010denjem koda u jednom nivou. Viti\u010daste zagrade pi\u0161ite u istom redu gde su i male zagrade uslova i odvojite ih jednim spejsom.<\/p>\n<p>[php]<br \/>\nif (($a == $b)<br \/>\n    &amp;&amp; ($b == $c)<br \/>\n    || (Foo::CONST == $d)<br \/>\n) {<br \/>\n    $a = $d;<br \/>\n}<br \/>\n[\/php]<\/p>\n<p style=\"text-align: justify;\">Isto va\u017ei i za ostale kontrole poput switch-a i do-while:<\/p>\n<p>[php]<br \/>\ndo {<br \/>\n    actions;<br \/>\n} while ($condition);<br \/>\n[\/php]<\/p>\n<h2>Komentari u kodu<\/h2>\n<p style=\"text-align: justify;\">Komentare u kodu mo\u017eete ostavljati na vi\u0161e na\u010dina ali praktikujte standardni C format ako se radi o bloku komentara:<\/p>\n<p>[php]<br \/>\n\/* blok komentara u kome poja\u0161njavate \u0161ta radi kod ispod<br \/>\nne morate opisivati kako radi jer se to mo\u017ee pro\u010ditati iz<br \/>\nsamog koga: Mnogo \u0107e vam vi\u0161e zna\u010diti na \u0161ta se kod odnosi.*\/<br \/>\n[\/php]<\/p>\n<p style=\"text-align: justify;\">Za jednolinijske komentare koristite C++ stil:<\/p>\n<p>[php]<br \/>\n\/\/ komentar za promenljivu ispod<br \/>\n$activeUsers = getAtiveUsers();<br \/>\n[\/php]<\/p>\n<h2 style=\"text-align: justify;\">Detaljnija literatura:<\/h2>\n<ul>\n<li><a href=\"http:\/\/make.wordpress.org\/core\/handbook\/coding-standards\/php\/\" target=\"_blank\">WordPress PHP Coding Standards<\/a><\/li>\n<li><a href=\"http:\/\/drupal.org\/coding-standards\" target=\"_blank\">Drupal Coding Standards<\/a><\/li>\n<li><a href=\"http:\/\/www.horde.org\/apps\/horde\/docs\/?f=CODING_STANDARDS.html\" target=\"_blank\">Horde Coding Standards<\/a><\/li>\n<li><a href=\"http:\/\/framework.zend.com\/manual\/1.12\/en\/coding-standard.html\" target=\"_blank\">Zend Framework Coding Standard for PHP<\/a><\/li>\n<li><a href=\"http:\/\/pear.php.net\/manual\/en\/standards.php\" target=\"_blank\">Pear Coding Standards<\/a><\/li>\n<li><a href=\"http:\/\/news.php.net\/php.standards\/2\" target=\"_blank\">PHP Standards and Best Practices for PHP 5.3+ Frameworks and Libraries<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Kratka lista preporuka za pisanje i formatiranje PHP koda za programere po\u010detnike i one koji su na PHP pre\u0161li sa drugih programskih jezika.<\/p>\n","protected":false},"author":2,"featured_media":2048,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[148],"tags":[45,231,42,110],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.plagosus.net\/blog\/wp-json\/wp\/v2\/posts\/2037"}],"collection":[{"href":"https:\/\/www.plagosus.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.plagosus.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.plagosus.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.plagosus.net\/blog\/wp-json\/wp\/v2\/comments?post=2037"}],"version-history":[{"count":0,"href":"https:\/\/www.plagosus.net\/blog\/wp-json\/wp\/v2\/posts\/2037\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.plagosus.net\/blog\/wp-json\/wp\/v2\/media\/2048"}],"wp:attachment":[{"href":"https:\/\/www.plagosus.net\/blog\/wp-json\/wp\/v2\/media?parent=2037"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.plagosus.net\/blog\/wp-json\/wp\/v2\/categories?post=2037"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.plagosus.net\/blog\/wp-json\/wp\/v2\/tags?post=2037"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}