![]() |
![]() |
![]() |
Po co jakiś standard?
Styl pracy nad projektem
Przygotowanie projektu
Tworzenie nazw
Komentarze
Nawiasy i spacje
Układ strony
Kodowanie HTML
Istotne warunki co do kodowania PHP
Kodowanie baz danych
A życie mogło być tak proste...
Wkład w powstanie niniejszej standaryzacji wnieśli (układ alfabetyczny): antyqjon, roodee, Sl@o
Podczas prac nad standaryzacją korzystano z opracowań:
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. 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ć :-)).
Dlaczego nie warto stosować standaryzacji w oprogramowaniu Open Source?
Standaryzacja to straszna przeszkoda i same kłopoty.
A teraz już serio :-)))))
Styl pracy nad projektem
Z uwagi na tworzenie systemu Open Source:
Przygotowanie projektu
Tworzenie nazwNazwy 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.
Wszystkie, rozdzielane podkreśleniem, człony nazwy pakietu powinny być pisane wszystkim dużymi literami.
Np. OPEN_SOURCE
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. Logowanie, Logowanie_Uzytkownika, Wprowadzenie_Nowego_Szablonu
W przypadku korzystania z biblioteki klas, jako prefiksu należy użyć nazwy pakietu.
Np. OPEN_SOURCE_Wprowadzenie_Nowego_Szablonu
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. polacz(), pobierzDane(), OPEN_SOURCE_specyfikujPotrzeby();
Np. OdpowiedziMax - maksymalna liczba możliwych odpowiedzi, OdpowiedziCnt - aktualna wartość odpowiedzi
Np. IsOdpowiedz - Czy jest odpowiedź?
Np. Poprawnie: GetHtmlStatystyka Niepoprawnie: GetHTMLStatystyka
Np. _sortuj(), _inicjujDrzewko(), $this ->_status
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.
Wszystkie człony pisane małymi literami i rozdzielone podkreśleniem.
Pisane podobnie jak zmienne. Nigdzie nie używaj myślnika "-". Zawsze używaj apostrofów lub cudzysłowów do wyodrębnienia elementów.
Kod: $myarr['foo_bar'] = 'Hello' //poprawnie $myarr['foo-bar'] = 'Hello' //niepoprawnie
W razie potrzeby definiowania wartości globalnych ich nazwa powinna być poprzedzona prefiksem w postaci pojedynczego podkreślenia, nazwy pakietu oraz kolejnego podkreślenia.
Kod: $_OPEN_SOURCE_jaki_ladny_jest_swiat
Takie wartości jak true, false, null powinny być pisane z małej litery.
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
W przypadku nazw pól to nie jest istotny warunek, gdyż nazwy pól są zawsze poprzedzane prefiksem od nazwy tablicy.
KomentarzeZazwyczaj, 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.
Każdy plik powinien zawierać informacje według poniższego wzoru, gdzie cześć:
Poniżej przedstawiam przykład takiego nagłówka:
Kod: /* 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.
Kod:
/* Jedna linia komentarza (zajmuje całą linię) */
Kod(); // Komentarz w tej samej linii, w której znajduje się linia.
/*
Bardzo ważna jedna linia komentarza
*/
/*
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!!!
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śniasz co się tutaj dzieje oraz podajesz prawdopodobne przyczyny błędu - ewentualnie nadaj błędowi ID :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, że ta część kodu może kryć niespodzianki, tak, by jeśli ktoś chce zmieniać kod, najpierw dobrze to przemyślał. :WARNING: Ostrzeżenie 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 słowo kluczowe było pierwszym słowem komentarza, a następnie nazwa zapisującego komentarz i data wpisu w formacie YYMMDD oraz nazwa problemu. Poniżej należy opisać problem.
Np.: /* * TODO: Sl@o 020907 dokończyć 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ą. */
Nawiasy i spacje
Kod: function($a, $b);
Kod:
function jakastam() // Komentarz
{
if ($warunek) {mieści się w jednej linii}
elseif ($warunek) // Komentarz
{
długi lub wieloliniowy tekst
}
else // Komentarz
{
if ($warunek2)
{
while ($warunek3) // Komentarz
{
długi lub wieloliniowy tekst
}
}
}
}
strcmp($s1, $s2);
return 1;
Układ stronyNajważniejszym celem standaryzacji jest pisanie czytelnego i zrozumiałego dla innych kodu.
(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ść.
Kod: $rezultat = stworz_uzytkownika ($uzytkownik, $haslo, $nazwisko $telefon, $email)
Kodowanie HTMLKodowanie HTML opiera się na rekomendacji Konsorcjum W3 co do XHTML.
Kod:
<table>
<tbody>
<tr>
<td>Jakiś tekst</td>
</tr>
<tr>
<td>
No i znowu tekst
</td>
</tr>
</tbody>
</table>
Kod: <p>paragraf <!-- niepoprawnie --> <p>paragraf</p> <!-- poprawnie --> <br> <!-- niepoprawnie --> <br /> <!-- poprawnie --> <br></br> <!-- poprawnie -->
Kod: <p>To jest <b>paragraf</p></b> <!-- niepoprawnie --> <p>To jest <b>paragraf</b></p> <!-- poprawnie -->
Kod: <input type="text" name="uzytkownicy" size="8">
Kod: <input type="checkbox" name="enabled" value="t" checked> <!-- niepoprawnie --> <input type="checkbox" name="enabled" value="t" checked="checked"> <!-- poprawnie -->
Istotne warunki co do kodowania PHP
error_reporting(E_ALL);
Kodowanie baz danych
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.
Kod:
$zap = "SELECT u_uzytkownik AS uzytkownik, u_imie AS imie,
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";
$result = "SELECT * FROM nazwa_tabeli WHERE cos ORDER BY tytul";
if (!result) {"BŁĄD: " . mysql_error();}
Kod: $tmp =$array[key]; //źle $tmp =$array["key"]; //dobrze
Cytat: $str = "To jest niewłaściwy sposób wstawiania $array[w_ten_sposób]"; $str = "To jest właściwy sposób wstawiania" . $array ["w_ten_sposób"];
[ POCZĄTEK ] | [ MENU ] | [ KONIEC ]
Jeżeli spodobały ci się nasze strony możesz je Dodać do Ulubionych lub ustawić tą stronę jako swoją Stronę główną. Możesz też wysłać swojemu znajomemu lub znajomej LINK do naszej strony.
Strona główna
Dodaj do ulubionych
Ustaw jako stronę główną
Wyślij link znajomemu/znajomej
Z TEJ STRONY SKORZYSTAŁO JUŻ:
OSÓB