Pary_anime
W wyniku przeprowadzonego g³osowania grupa ochotników zaakceptowa³a propozycjê standardy kodowania dla projektów OpenSource.
Prace nad "Standardem..." przebiega³y w burzliwej atmosferze. By³y d³ugotrwa³e dyskusje, przekonywania sie (co tu ukrywac) za¿artych k³ótniach. Dyskusjom nie by³o koñca. Ostatecznie zdecydowano siê poddaæ projekt Standardu pod g³osowanie. [/b] Uznali¶my, ¿e lepsze jest wrogiem dobrego, a nasze akademickie dyskusje mog± siê ci±gn±æ w nieskoñczono¶æ. Zawsze mo¿na niedoci±gniêcia poprawiæ pó¼niej.
Do g³osowania zostali zaproszeni nie tylko uczestnicy dyskusji, ale równie¿ inni zwolennicy PHP i Open Source . G³osowanie zakoñczy³o siê 20 grudnia 2002, a wiêc jeszcze przed
Bo¿ym Narodzeniem.
Przyjêty standard jest kompromisem i mo¿e uledz dalszym zmianom. Nikt nie zak³ada, ¿e zosta³ stworzony raz na zawsze, a jego cel to stworzenie konwencji zapisywania kodu.
Jeszcze przed g³osowaniem, ¿e osoby wstrzymuj±ce siê od g³osu nie wp³ywaj± na wynik g³osowania, ale ich g³os wskazuje, ¿e uwa¿aj± za konieczne rozwa¿enie w przysz³osci zmian w przypadku ewentualnego przyjecia poszczególnych elementów "Standardu...).
Wyniki g³osowania w procentach (za / wsztrzyma³o siê / przeciw):
l Po co jaki¶ standard? ( 76 / 11 / 11 )
lStyl pracy nad projektem ( 75 / 6 / 18 )
lUk³ad strony ( 41 / 47 / 11 )
lTworzenie nazw ( 56 / 12 / 31 )
lKomentarze ( 37 / 37 / 25 )
lNawiasy i spacje ( 43 / 31 / 25 )
lIstotne warunki co do kodowania PHP ( 82 / 5 / 11 )
lKodowanie PHP na styku z SQL i tablicami ( 75 / 6 / 18 )
lKodowanie baz danych ( 58 / 5 / 35 )
lKodowanie HTML ( 88 / 5 / 5 )
Zg³oszone od dzi¶ propozycje zmian bêd± mog³y byæ g³osowane w po¼niejszym czasie.
Dla celów zg³aszania zmian stworzony zosta³ temat: Standard kodowania - propozycje zmian i korekt
Wk³ad w powstanie niniejszej standaryzacji wnie¶li (uk³ad alfabetyczny):
antyqjon, roodee, Sl@o
Podczas prac nad standaryzacj± korzystano z opracowañ:
http://utvikler.start.no/code/php_coding_standard.html
http://srparish.net/writings/php_code_standards.html
http://pear.php.net/manual/en/standards.php
W przypadku watpliwosci lub rozbieznosci o wyborze decydowac bedzie sposob zapisu stosowany z manualem PHP.
Duzy wklad w powstanie niniejszego standardu kodowania dla aplikacji PHP na niniejszym forum wniesli uczestnicy grupy dyskusyjnej pl.comp.lang.php oraz liczni go¶cie na forum Skorosze.pl
Po co jaki¶ standard?
Niniejsze opracowanie opiera siê na dyskusji grupy projektowej i jest czê¶ci± projektu Open Source. Niniejszym standaryzacja ma system otwarty, mo¿e byæ modyfikowana, rozbudowywana, skracana, etc, Autorzy licz± jednak na informowanie o naniesionych poprawkach w celu aktualizacji niniejszej standaryzacji.
Okre¶lenie to ma sprzyjaæ powstaniu ³atwego do przegl±dania i modyfikowania kodu PHP jak najblizszego temu podanemu bibli kazdego PHPowca, tj. w manualu PHP. Nie mniej wa¿nym celem jest konieczno¶æ okre¶lenie konwencji pisania aplikacji.
Niniejszy standard kodowania jest bliski tradycyjnej unixowej formule kodowania. Jednak¿e w wielu miejscach zdecydowano siê na rozwi±zania praktyczne, które sta³y w sprzeczno¶ci z podej¶ciem tradycyjnym. Ale siê bêd± wkurzaæ )). Od unixowej tradycji wieksza wage ma dla nas manual PHP.
Dlaczego nie warto stosowaæ standaryzacji w oprogramowaniu Open Source?
Standaryzacja to straszna przeszkoda i same k³opoty.
- l ka¿dy mo¿e zrozumieæ napisany przez Ciebie kod i go rozwin±æ
A dlaczego ma rozumieæ, ty siê tak namêczy³e¶, a kto¶ ma to rozwijaæ ot tak sobie. A nie lepiej by posiedzia³ nad tym co zrobi³e¶ dwa razy d³u¿ej i nic nie zrozumia³. l ka¿da standaryzacja jest _nierozwa* i dlatego lepiej nawet samemu jej nie stosowaæ
Dlatego lepiej nie stosowaæ nawet w³asnego standardu, bo to naprawdê du¿y fun nie rozumieæ nawet samemu co siê napisa³o. To nawet lepsze od krzy¿ówek, bo mo¿esz spêdziæ z kilka godzin na co¶, co w inny sposób zajê³oby Ci minutê, a na nowo napisaæ mo¿na w godzinê. l standardy krêpuje i niszcz± kreatywno¶æ
Przecie¿ nie ma nic lepszego jak stosowaæ stylu pisania zale¿nie od w³asnego nastroju i daæ popis weny twórczej. Np. zacz±æ pisaæ funkcjê otworzyæ nawias i w bloku komentarzy opisaæ ze szczegó³ami ostatnie spotkanie z kumplami i dziewczynami, gdzie¶ w ¶rodku przypomnieæ sobie co siê robi wiêc wtr±ciæ parê argumentów bez przenoszenia tego do innej linii, wróciæ do swego literackiego opisu, daj±c tym popis swojej literackiej elokwencji..
W ten sposób kto¶ nie tylko pozna kod twojej aplikacji, ale i dokulturalni siê!
l nie ma nic fajniejszego w PHP jak tworzenie w³asnego standardu do koñca ¿ycia. Sam kod jest nudny i jego pisanie mo¿na zostawiæ na pó¼niejl Nie ma nic fajniejszego jak robienie tych samych b³êdów na nowo i na nowo bez koñca.
l po co stosowaæ standardy. Przecie¿ wszyscy s± tacy sami i my¶l± tak samo.
l I tak nikt nie stosuje siê do standardów
A teraz ju¿ serio
Styl pracy nad projektem
Z uwagi na Ustawe o jezyku polskim, aplikacje beda pisane w Polsce w jêzyku polskim, a czesci powstale za granica tlumaczone na jêzyk polski. Jednak dla celów upublicznienia równolegle powinna powstawac wersja w jezyku o charakterze miedzynarodowym.
- l Podstawowym celem jest stworzenie aplikacji dzia³aj±cej poprawnie, a dopiero w dalszej kolejno¶ci do³±czenie cech nadzwyczajnych i innych bajerów l Hierarchia wa¿no¶ci (od cech najwa¿niejszych do mniej wa¿nych): poprawne dzia³anie, bezpieczeñstwo, ³atwo czytelny kod, ³atwo¶æ obs³ugi, ³atwo¶æ instalacji i dba³o¶æ o ma³y rozmiar, du¿e mo¿liwo¶ci korzystania, moc, cechy i mo¿liwo¶ci aplikacjil Wszystkie komponenty powinny byæ tak projektowane, by pozwalaæ na ich prosta administracjê, czy konfiguracjê l Wiêksza dba³o¶æ o czytelno¶æ kody PHP ni¿ kodu HTML. l Dba³o¶æ o jak najprostsze i banalne rozwi±zania. Czym prostsze i _nierozwa* tym lepsze.
Z uwagi na tworzenie systemu Open Source:
- l wszystkie nazwy zmiennych, funkcji, metod, tablic, pol, klas. etc powinny byc pisane w jezyku o charkaterze miedzynarodowym (wskazany: angielski). l komentarze i naglowki w wersji udostepniane jako kolejne wersje aplikacji powinny byæ podane w jezyku o charakterze miedzynarodowym (wskazany: angielski) - w przypadku wersji lokalnych mog± byæ podane w lokalnej wersji jezykowej.
Uk³ad strony
Najwa¿niejszym celem standaryzacji jest pisanie czytelnego i zrozumia³ego dla innych kodu.
1. Szeroko¶æ strony
- l Kod PHP (z wyj±tkiem wstawek do HTML) musi mie¶ciæ siê linii 80-o znakowej. l Powy¿sza zasada nie jest stosowana w przypadku kodu HTML, ale oczywi¶ci przestrzeganie tej zasady jest mile widziane.
2. Wciêcia:
- l Standardowo nale¿y u¿ywaæ wciêcia o d³ugo¶ci 4 spacji w przypadku kodu PHP i dwie w przypadku kodu HTML.
(To wci±¿ jest sprawa otwarta, gdy¿ niektóre standardy zalecaj±, w zwi±zku z edytorem vim, w ka¿dym przypadku dwie, co nie osobi¶cie siê bardzo podoba.)
Nie wolno stosowaæ tabulatorów, chyba, ¿e tabulator dzia³a jako forma wpisywania okre¶lonej liczby spacji do kodu. Takie mo¿liwo¶ci daje chocia¿by Emacs, gdzie nale¿y ustawiæ indent-tabs-mode do nil.
Jedynym wyj±tkiem jest mo¿liwo¶æ wstawienia tabulatora pomiêdzy koñcem linii kodu, a pocz±tkiem komentarza w tym samym wierszu. W przypadku kilku linii komentarza, równe ich ustawienie pozwol± na wiêksz± czytelno¶æ.
- l Je¶li istnieje konieczno¶æ z³amania wiersza kodu ze wzglêdu na kod, to nale¿y tak go z³amaæ, by poni¿sza cze¶æ kodu by³a dok³adnie poni¿ej pierwszej zmiennej w wy¿szym wierszu.
codeDivStart() $rezultat = stworz_uzytkownika ($uzytkownik, $haslo, $nazwisko
$telefon, $email);
Tworzenie nazw
Nazwy s± jednym z kluczowych elementów kodu PHP - sercem aplikacji.
Nazwy powinny opisywaæ to co nazywaj± i do czego s³u¿± w sposób jak najbardziej jednoznaczny.
Zaleca siê unikanie w opisowej czê¶ci wiêcej cz³onów ni¿ trzy, gdy¿ zazwyczaj utrudnia to zrozumienie kodu ni¿ poprawê jego czytelno¶æ. Poza tym takie nazwy s± bardziej przemy¶lane i rzadko potrzebuj± wiêcej cz³onów ni¿ 3.
Pakiety
Wszystkie, rozdzielane podkre¶lenie, cz³ony nazwy pakietu powinny byæ pisane wszystkim du¿ymi literami.
Np.
codeDivStart() OPEN_SOURCE
Klasy
Klasy powinny byæ jak najdok³adniejszymi ich opisami. Je¶li to mo¿liwe to zaleca siê unikanie skrótów. Ka¿dy cz³on nazwy powinien byæ pisany z du¿ej litery, a cz³ony powinny byæ rozdzielane za pomoc± podkre¶lenia.
Np.
codeDivStart() Logowianie, Logowanie_Uzytkownika, Wprowadzenie_Nowego_Szablonu.
W przypadku korzystania z biblioteki klas, jako prefiksu nale¿y u¿yæ nazwy pakietu.
Np.
codeDivStart() OPEN_SOURCE_Wprowadzenie_Nowego_Szablonu
Funkcje i Metody
System ten nazywany jest "camel caps". Nazwa pochodzi od wygl±du napisu, który przypomina garby wielb³±da. Pierwszy cz³on nazwy jest pisana z ma³ej litery, a ka¿dy nastêpny wyraz z du¿ej, a dodatkowo brak jest znaku (spacja to te¿ znak) rozdzielaj±cego. W przypadku funkcji nale¿y stosowaæ (a przynajmniej siê zaleca) prefiksów okre¶laj±cych nazwê pakietu, z którego pochodz± funkcje, co zapobiegnie kolizji miêdzy pakietami.
Np.
codeDivStart() polacz(), pobierzDane(), OPEN_SOURCE_specyfikujPotrzeby()
Zalecane skróty sufiksy
Max - maksymalna mo¿liwa warto¶æ
Cnt - aktualnie zliczona warto¶æ
Key - warto¶æ kluczowa
Np.
OdpowiedziMax - maksymalna liczba mo¿liwych odpowiedzi,
OdpowiedziCnt - aktualna warto¶æ odpowiedzi
- Zalecane skróty prefiksów (na pocz±tku du¿e litery! ):
Get - w celu pobrania warto¶ci
Set - w celu ustalenia warto¶ci.
Np.
IsOdpowiedz - Czy jest odpowied¼?
- l ¯aden z cz³onów nie powinien sk³adaæ siê z du¿ych liter, nawet gdy ten cz³on jest skrótem, lub powszechnie uznawan± form± zapisu.
Poprawnie: GetHtmlStatystyka
Niepoprawnie: GetHTMLStatystyka
- l W przypadku funkcji w tzw. klasach prywatnych zaleca siê je poprzedzaæ pojedyñczym podkresleniem.
_sortuj(), _inicjujDrzewko(), $this ->_status
Warto¶ci sta³e
Wszystkie cz³ony nazwy powinny byæ pisane wszystkimi wielkimi literami ³±czonymi podkre¶leniami. W przypadku, gdy warto¶æ ma zwi±zek z nazw± klasy/pakietu to jej/jego nazwa powinna byæ zapisana wielkimi literami.
Zmienne
Wszystkie cz³ony pisane ma³ymi literami i rozdzielone podkre¶leniem.
Elementy tablic
Pisane podobnie jak zmienne. Nigdzie nie u¿ywaj my¶lnika "-". Zawsze u¿ywaj apostrofów lub cudzys³owów do wyodrêbnienia elementów.
codeDivStart() $myarr['foo_bar'] = 'Hello'; //poprawnie
$myarr['foo-bar'] = 'Hello'; //niepoprawnie
Warto¶ci globalne
W razie potrzeby definiowania warto¶ci globalnych ich nazwa powinna byæ poprzedzona prefiksem w postaci pojedynczego podkre¶leniem, nazwy pakietu oraz kolejnego podkre¶lenia.
Np.
codeDivStart() $_OPEN_SOURCE_jaki_ladny_jest_swiat
Warto¶ci predefiniowane
Takie warto¶ci jak true, false, null powinny byæ pisane z ma³ej litery.
Nazwy w bazach danych SQL
- klucz podstawowy
- l Ka¿da tabela musi mieæ ustawiony serial index jako jej klucz podstawowy (primary key), a w nazwie powinien zawieraæ cz³on id.
- Nazwy tabel
- l Nazwami tabel nie mog± byæ samodzielnie (tzn. jako jedyne cz³ony, bez prefiksów, etc) s³owa zarezerwowane dla SQL, tj.:
codeDivStart() abort add all allocate alter analyze and any are as asc assertion at authorization avg begin between binary bit bit_length both by cascade cascaded case cast catalog char character character_length char_length check close cluster coalesce collate collation column commit connect connection constraint continue convert copy corresponding count create cross current current_date current_session current_time current_timestamp current_user cursor date datetime deallocate dec decimal declare default delete desc describe descriptor diagnostics disconnect distinct do domain drop else end escape except exception exec execute exists explain extend external extract false fetch first float for foreign found from full get global go goto grant group having identity in indicator inner inout input insert intersect interval into is join last leading left like listen load local lock lower max min module move names national natural nchar new no none not notify null nullif numeric octet_length offset on open or order out outer output overlaps partial position precision prepare preserve primary privileges procedure public references reset revoke right rollback rows schema section select session session_user set setof show size some sql sqlcode sqlerror sqlstate substring sum system_user table temporary then timespan to trailing transaction translate translation trim true union unique unknown unlisten until update upper usage user using vacuum value values varchar varying verbose view when whenever where with without work write
- l Nazwy tablel s± zapisane w ca³o¶ci ma³ymi literami, a poszczególne s³owa rozdzielone s± podkre¶leniami
l Nazwy tabel s± podawane w liczbie mnogiej zgodnie z tym co zawieraja, tj. zawsze nale¿y pisac uzytkownicy zamiast uzytkownik
- Nazwy pól
- l Nazwy pól s± zapisane w ca³o¶ci ma³ymi literami, a poszczególne s³owa rozdzielone s± podkre¶leniami l Nazwy pól s± podawane w liczbie pojedynczej, chyba ¿e zawieraj± tre¶æ wskazuj±c± na wiele elementów
l Nazwy pó³ s± poprzedzone prefiksem sk³adaj±cym siê z pierwszych liter poszczególnych cz³onów nazwy tabeli, np. dla tabeli kategorie_uzytkownokow - ku_id
l W przypadku nazw pól nie jest zabronione stosowanie nazw zastrze¿onych, gdy¿ zgodnie z niniejsz± zasad± nazwy pól s± zawsze poprzedzane prefiksem od nazwy tablicy. W innym przypadku nazwy nie moglyby zawieraæ nazw zastrze¿onych.
Komentarze
Zazwyczaj, po przygotowaniu skryptu, gdy patrzymy na piêknie napisany kod widz±c jego przejrzysto¶æ jeste¶my zafascynowani, ¿e nawet nie potrzeba s³owa komentarza. Wszystko jest oczywiste. Ale ju¿ tydzieñ pó¼niej tak oczywistym to nie jest, a po miesi±cu... Po trzech to ju¿ czara magia.
No có¿ ka¿dy przez to przeszed³.
Komentarze powinny opisaæ jak wszystko dzia³a. W zasadzie nigdy komentarzy zbyt wiele, ale jak pominiesz to, ¿e "obieca³e¶ zrobiæ co¶ z tym plikiem tydzieñ temu, ale, ¿e zabalowa³e¶, to dopiero zabra³e¶ za niego trzy dni pó¼niej a tak naprawdê to robisz dopiero dzisiaj i strasznie boli Ciê g³owa, etc... to chyba siê nikt nie pogniewa.
Nag³ówek
Ka¿dy plik powinien zawieraæ informacje wed³ug poni¿szego wzoru, gdzie cze¶æ:
- l pierwsza - informacje co do u¿ywanego edytora i jego ustawieñ,l wersja oprogramowania, dla której pisany by³ kod l trzecia nazwê pliku, l czwarta - od projektu podstawowego,
l pi±ta - opis zadañ wykonywanych przez plik (bez przesady oczywi¶cie i nawet mo¿e byæ pominiêta, je¶li nazwa pliku wskazuje na zadania wykonywane przez plik), l szósta - opis zmiennych (z wyszczególnieniem tych, które korzystaj± z warto¶ci domy¶lnych), l siódma - niezbêdnych plików do funkcjonowania, l ósma - zasad korzystania, kopiowania, u¿ywania i praw autorskich, l dziewi±ta - osób, które pracowa³y nad plikiem.
Poni¿ej przedstawiam przyk³ad takiego nag³ówka:
codeDivStart() /* nazwa edytora:
+-------------------------------------------------------------------+
| PHP version 4 |
+-------------------------------------------------------------------+
| index.php |
+-------------------------------------------------------------------+
| Niniejszy plik jest czê¶ci± projektu System Obs³ugi Stron WWW |
+-------------------------------------------------------------------+
| 1. Czynno¶æ pierwsza jaka robi niniejszy plik |
| 2. Czynno¶æ druga |
| 3. Czynno¶æ trzecia |
| 4. Czynno¶æ czwarta |
| 5. Czynno¶æ pi±ta |
+-------------------------------------------------------------------+
| Zmienne: |
| $zmienna1 - ot taki przyk³ad |
| $zmienna2 - ot taki przyk³ad |
| $zmienna3 - ot taki przyk³ad |
+-------------------------------------------------------------------+
| haselka.php - bardzo wazny plik |
+-------------------------------------------------------------------+
| OPROGROMAWANIE MO¯NA STOSOWAC POD WARUNKIEM, |
| ZE UWAZA SIÊ I Z TY ZGADZA DO TEGO CO NASTEPUJE: |
| Autorzy nie ponosza odpowiedzialnosci za dzialanie programu. Cala |
| odpowiedzialnosc spoczywa na osobach konfigurujacych aplikacje |
| lub w inny sposob korzystajacy z kodu |
| Prawa autorskie: Grupa programistów pracuj±cych spo³ecznie i bez |
| jakichkolwiek pieniedzy w ramach projektow OPEN SOURCE. |
| Pozostawiane jest prawo do swobodnego kopiowania, zmieniania kodu |
| jego upowszechniania na zasadach licencji GNU GPL. |
| |
| UWAGA: |
| W przypadku wykorzystania niniejszego oprogramowania lub |
| jego czesci nale¿y umiescic niniejsza uwage, ze nikt nie ma prawa |
| do wlaczania niniejszego kodu w calosci lub tylko jego czesci |
| do aplikacji, za które bêdzie pobieral jakiekolwiek wynagrodzenie |
| Kod ten powinna byæ zawsze dostepna dla wszystkich bezplatnie |
| Z tego ograniczenia sa zwolnieni wszyscy, którzy sa wskazani jako |
| autorzy w projekcie wskazanym w naglowku. |
+-------------------------------------------------------------------+
| Autorzy: |
| rooddee <roodee.serwer.com> |
| ktos_inny < ktos_inny.polbox.com> |
+-------------------------------------------------------------------+
*/
Za autorów uwa¿a siê inicjatorów powstania kodu wraz z osobami, które dokona³y przynajmniej od 10% do 20% zmian w kodzie. Prosta reorganizacja kodu i poprawienie b³êdów nie mo¿e byæ uwa¿ana za wystarczaj±c± podstawê do dodania do listy autorów.
Komentarze w kodzie PHP:
codeDivStart() /* Jedna linia komentarza (zajmuje ca³± liniê) */
codeDivStart() Kod(); // Komentarz w tej samej linii, w której znajduje siê linia.
codeDivStart() /*
* Bardzo wa¿na jedna linia komentarza
*/
codeDivStart() /*
* Wielowierszowy komentarz. Tutaj ju¿ mog± znale¼æ ca³e
* zdania. Wygl±dem swym przypominaj± paragraf
*/
U¿ywany w perlu i shelu sposób komentowania przy pomocy # jest nie poprawny! !
S³owa specjalne w komentarzach
W komentarzach stosuje siê równie¿ s³owa specjalne. Mog± one byæ pomocne w czasie parsowania skryptu.
:TODO: topic
Oznacza, to co jest do zrobienia, po to by o tym nie zapomnieæ
:BUG: [ID_bledu] topic
tak wpisujesz zauwa¿one b³êdy, wyja¶ñ tu co siê dzieje i prawdopodobne przyczyny b³êdu oraz ewentualnie nadaj ID b³êdowi
:KLUDGE:
Je¶li nie jeste¶ zadowolony z wykonanej pracy, to poinformuj o tym i napisz co by¶ zmieni³, gdyby¶ mia³ wiêcej czasu. Ale bez fa³szywej skromno¶ci
:TRICKY:
Poinformuj, ze ta czesc kodu mo¿e kryæ niespodzianku, tak, by je¶li kto¶ chce zmieniaæ kod, to najpierw d³ugo o tym mysla³.
:WARNING:
Ostrze¿ przed czym¶
:PARSE:
czasami nie da siê nic zrobiæ z kodem i trzeba obej¶æ problem. Powiadom o tym.
:ATTRIBUTE: value
Mo¿esz tworzyæ w³asne atrybuty o nazwach stworzonych przez siebie.
W przypadku stosowania s³ów kluczowych w komentarzach wskazane jest by slowo kluczowe by³o pierwszym slowem komentarza, a nastepnie nazwa zapisujacego komentarz i date wpisu w formacie YYMMDD oraz nazwa problemu. Ponizej nale¿y opisaæ problem.
Np.
codeDivStart() /*
* TODO: Sl@o 020907 dokonczyæ ten standard kodowania
* Musze czym szybciej dokoñczyæ ten system kodowania i umie¶ciæ
* go na forum, by inni go skomentowali i nanie¶li
* w³asne poprawki. Mam nadzieje, ze nie skrzycz±.
*/
Komentarze w wersji podstawowej pisane sa w jezyku polskim. Dla celow szerszego upublicznienia aplikacji wykonywane beda wersje w jezyku o charakterze miedzynarodowym.
Nawiasy i spacje z nimi zwiazane
Nawiasy sze¶cienne {}
- Nawiasy sze¶cienne {} pozostawiane s± samotnie w nowej linii, chyba, ze cale wyra¿enie mie¶ci siê w jednej linii. Nawias znajduje siê w tej samej kolumnie co pierwsza litera wyrazu wywo³uj±cego blok. Ten sposób zapisu pewnie nie podoba siê tradycjonalistom, ale ma uzasadnienie praktyczne i jest preferowany. Jest poza tym zgodne z zasadami przyjetymi w manualu PHP i wielu aplikacjami Open Source
Nawiasy ()
- l Spacjê nale¿y wstawiæ pomiêdzy s³owami kluczowymi (np. if, while, for) oraz nawiasem otwieraj±cym oraz nawiasem zamykaj±cym i nawiasem sze¶ciennym, otwieraj±cym blok, je¶li znajduje siê w tej samej linii
l Po nazwie funkcji spacji nie nale¿y wstawiaæ, podobnie po ( i [ oraz przed ] i ). Spacja rozdzielamy zmienne po przecinku, np.
codeDivStart() function($a, $b); l Po s³owie return nie nale¿y wstawiaæ nawiasów, je¶li to nie jest konieczne.
{
if ($warunek) {mie¶ci siê w jednej linii}
elseif ($warunek) // Komentarz
{
d³ugi lub wieloliniowy tekst
}
elseif ($warunek) // Komentarz
{
if ($warunek2)
{
while ($warunek3) // Komentarz
{
d³ugi lub wieloliniowy tekst
}
}
}
}
strcmp($s1, $s2);
return 1;
Istotne warunki co do kodowania PHP
- l Zawsze u¿ywaæ pary znaczników <?php ?>, a nie <? ?>, co zapewnia wiêksze prawdopodobieñstwo poprawnego wykonywania skryptu przez jednoznaczno¶æ znacznika i wiêksz± kompatybilno¶æ z ju¿ istniej±cymi systemami.
l Wszystkie pliki PHP powinny byæ plikami wykonywalnymi. Oznacza to, ¿e wszystkie pliki powinny mieæ standardowo okre¶lone rozszerzenie .php. Jednak¿e w trakcie pisania kodu nazwy plików bêd± okre¶lane jako z³o¿enie nazwy w³a¶ciwej i zmiennej i rozszerzenia, np. nazwa . $php, gdzie $php=".php";
l Wiersze (linie) tekstu koñczone bêd± za pomoc± "\n" zamiast innych rozwi±zañ alternatywnych
l Raczej stosuj require ni¿ include (w³a¶ciwie dlaczego? )
l Pod³±czaj±c plik klasy stosowaæ w przypadku pod³±czania bezwarunkowego require_once(), w przypadku warunkowego include_once(). Zawsze jednak zwracaj uwagê, by klasa by³a podpiêta tylko raz, chocia¿ stosuj± one t± sama listê plików i raczej nie powinna istnieæ obawa, ¿e po zastosowaniu require_once() nast±pi pod³±czenie tych samych plików za pomoc± funkcji include_once(). Polecenia require_once() oraz include_once() nie potrzebuj± cudzys³owów.
l Funkcji phpinfo nigdy nie wolno umieszczaæ w tre¶ci kodu, z uwagi na brak mo¿liwo¶ci zabezpieczenia za pomoc± has³a.
Wskazania i preferencje co do kodowania PHP
- l Zmienna $GLOBAL nigdy nie mo¿e byæ u¿yta w funkcjach lub klasach funkcji, z wyj±tkiem warto¶ci konfiguracyjnych
l Dane konfiguracyjne powinny byæ w³±czone ze specjalnych plików konfiguracyjnych i powinny w jak najmniejszym stopniu zawieraæ tablice z opcjami zale¿nymi l Do funkcji powinno byæ dodanych kilka linii komentarza opisuj±cego opis funkcji, definicje i wyja¶nienia co do argumentów, prawdopodobne typy wyników i ich warto¶ci oraz wyja¶nienia ich znaczeñ, a równie¿ przyk³ady zastosowañ funkcji l Nale¿y u¿ywaæ raczej komendy print ni¿ echo
lUnikaj czêstych prze³±czeñ pomiêdzy PHP i HTML w przypadku ich blisko¶ci.
Obs³uga b³êdów
- l Sprawdzaj system, czy nie ma b³êdów, chyba, ¿e chcesz znane b³êdy ignorowaæ.
l Wprowad¼ informacjê z nazwami b³êdów do ka¿dej informacji o b³êdach.
Kodowanie PHP na styku z SQL i tablicami
Kod nale¿y pisaæ tak, by ³atwo by³o go modyfikowaæ, a szczególnie odpluskwiaæ. Wyniki zapytañ zawsze musza byæ sprawdzane pod wzglêdem zwracanych wyników i zg³aszanych wyników.
- l S³owa kluczowe SQL powinny byæ pisane w ca³o¶ci wielkimi literami. Nazwy tablic oraz pól, je¶li to mo¿liwe, zaleca pisaæ siê ma³ymi literami. W przypadku zapytañ o d³ugo¶ci przekraczaj±cych jedn± liniê zapytanie dzielimy w przed lub po s³owie kluczowym SQL
u_nazwisko AS nazwisko
FROM uzytkownik, grupy_uzytkownikow, grupy
WHERE
u_id = ugm_u_id
AND
ugm_g_id = g_id
AND
g_name ='$okreslona_grupa'
ORDER BY uzytkownik ASC";
- l W przypadku b³êdów nigdy nie powinna wy¶wietlaæ siê tre¶æ zapytania ($query), chyba, ¿e celowo zosta³o to tak ustawione. Wy¶wietlenie zmiennej $query mog± pozwoliæ u¿ytkownikowi na poznanie struktury danych, a przez to u³atwiæ uszkodzenie bazy danych, a mo¿e i ca³ej aplikacji.
l W przypadku s³ów kluczowych i warto¶ci umieszczanych w array, powinny one byæ ujête w cudzys³ów.
codeDivStart() $tmp =$array[key]; //¼le
$tmp =$array["key"]; //dobrzel Unikaj umieszczania tablic w ¶rodku cudzys³owów dla kodu PHP
$str = "To jest w³a¶ciwy sposób wstawiania" . $array ["w_ten_sposób"];
Kodowanie baz danych
- l U¿ywaæ nale¿y pól text dla pól, które maj± charakter znakowy, a nie s± bezpo¶rednio powi±zane z innymi typami danych, chyba ¿e zawsze ich d³ugo¶æ jest ograniczona (wtedy lepiej u¿yæ varchar lub char.
l W przypadku pól s³u¿±cych do wpisywania daty lub czasu nale¿y zawsze stosowaæ datatime nawet je¶li zale¿y nam na czê¶ci data lub time.
l Dla pól maj±cych na celu podanie warto¶ci logicznych co prawdy i fa³szu bêd± zawsze u¿ywane pola o charakterze logicznym, bool i boolen s± tego dobrym przyk³adem.
l Poza wyj±tkowymi sytuacjami, pola powinny mieæ ustalon± warto¶æ not null. Takie pola powinny mieæ okre¶lon± warto¶æ domy¶ln± (default)
Kodowanie HTML
Kodowanie HTML opiera siê na rekomendacji Konsorcjum W3 co do XHTML
Nizej podane sa niektore zmiany w stosunku do tego co wiekszosc zna z czystego html. Stsowanie pelnego formatowania z XHTML mile widziane i zalecane.
- l Nie ma tu ograniczenia co do d³ugo¶ci linii do 80 znaków. Oczywi¶cie krótsze linie s± mile widziane. l Kolejne poziomy zagnie¿d¿enia powinny byæ wyró¿nione za pomoc± dodatkowej spacji, np.
codeDivStart()
<table>
<tbody>
<tr>
<td>Jaki¶ tekst</td>
</tr>
<tr>
<td>
No i znowu tekst
</td>
</tr>
</tbody>
</table>
l Elementu, znaczniki i atrybuty powinny byæ pisane z malej liter.
l Wszystkie poziomy zagnie¿d¿enia powinny byæ zamkniête za pomoc± znaczników zamykaj±cych, a w przypadku znaczników zamykaj±cych zbiory puste za pomoc± znaczników specjalnych (nie dotyczy to znacznika komentarza. codeDivStart() <p>paragraf <!-- niepoprawnie -->
<p>paragraf</p> <!-- poprawnie -->
<br> <!-- niepoprawnie -->
<br /> <!-- poprawnie -->
l Poszczególne poziomy powinny byæ poprawnie zagnie¿d¿one codeDivStart() <p>To jet <b>paragraf</p></b> <!-- niepoprawnie -->
<p>To jet <b>paragraf</b></p> <!-- poprawnie -->
l Atrybuty zawsze musza byæ zamkniête w cudzys³owach, nawet liczby codeDivStart() <input type="text" name="uzytkownicy" size="8">
l Wszystkie atrybuty musz± mieæ podane warto¶ci. Je¿eli w przypadku HTML stosowania warto¶ci dla atrybutu nie przewidziano to warto¶æ atrybutu jest taka sama jak nazwa atrybutu. codeDivStart() <input type="checkbox" name="enabled" value="t" checked> <!-- niepoprawnie -->
<input type="checkbox" name="enabled" value="t" checked="checked"> <!-- poprawnie -->
l Komentarz w stylu HTML mo¿na robiæ tylko wówczas, gdy w zamiarze ma byæ on widoczny dla u¿ytkowników. W ka¿dym innym przypadku komentarze nale¿y wstawiaæ jako komentarze PHP.
l Nale¿y sprawdzaæ, by ca³o¶æ by³a wy¶wietlana tak by by³a mo¿liwa do zaakceptowania nawet, gdy nie ma dostêpu do CSS lub JavaScript jest wy³±czony
l Nale¿y zwracaæ uwagê na ortografiê
l Strony musz± byæ poprawnie wy¶wietlane i funkcjonalne pod nastêpuj±cymi przegl±darkami: MsIE5 i 6, Netscape6 i 7, Gozzilla, Mozzilla, Galeon dzia³aj±cymi pod Windowsami i Linuxem (je¶li maja wersjê linuxow±)