(this page is translated by Google; We're working hard on a human translation)
Standard kodowania
Ten dokument opisuje zasady i zalecenia dotyczące rozwoju aplikacji i bibliotek klasy przy użyciu języka PHP.
Wspólnej konwencji nazewnictwa
- Zawsze wybrać konkretne i szczegółowe opisy.
- Unikaj stosowania samych skrótów chyba pełna nazwa jest zbyt duża.
- wielkie korzystania dwuliterowy skrótów Pascal Sprawa dłużej skrótów.
- Podczas korzystania CamelCase lub PascalCase, podkreślenia są dozwolone.
Pliki PHP
- , Że pliki zawierają tylko kod PHP, tag zamykający (
?>) nie jest dozwolone. Nie obejmuje zapobiega końcowe spacje przed przypadkowym wniesienie do wyjścia. - Użyj tiret 4 spacji, bez kart.
- Zalecana długość linii wynosi 80 znaków, czyli deweloperzy powinni zachować AIM kod blisko 80-granica kolumnie jest to praktyczne.
- Kod PHP musi być zawsze ograniczony przez pełnej formie znaczników PHP:
<?php ... ?> - Zawsze odpowiada nazwie klasy i nazwa pliku.
Dla wszystkich innych plików, tylko znaki alfanumeryczne, podkreślenia i znak myślnika ( - ) są dozwolone. Przestrzeni i są zabronione. Ana, że plik zawiera kod PHP musi kończyć Ana z rozszerzeniem .php lub .phtml w przypadku szablonów.
Smyczki
Kiedy łańcuch znaków jest dosłowne (nie zawiera zmiennych podstawienia), pojedynczy cytat musi być zawsze używane wyznaczenie ciągu. Wyjątek: gdy łańcuch literalny sam zawiera apostrofy, dozwolone jest wyznaczenie struny cudzysłów.
Łańcuchy znaków łączy się za pomocą . operatora. Miejsce musi być zawsze dodany przed i po . operatora w celu zwiększenia czytelności. Dozwolone jest przerwa oświadczenie na wiele linii - każdy kolejny wiersz powinien być dopełnione białe że susza . operator jest wyrównany W = operator:
$sql = "SELECT `id`, `name` FROM `people` "
. "WHERE `name` = 'Susan' "
. "ORDER BY `name` ASC " ; Tablice
Deklarując indeksowane tablice i spacje dodał Must Be Po każdym separator przecinek aby zwiększyć czytelność tekstu:
$sampleArray = array ( 1 , 2 , 3 , 'test' ); Deklarując, tablice asocjacyjne, to zachęca się umieścić każdy klawisz i pary wartości oddzielone on-line, wyściełana z 4 pomieszczeń. Po ostatniej pary dodał Must Be przecinkami.
$sampleArray = array (
'firstKey' => 'firstValue' ,
'secondKey' => 'secondValue' ,
); Klasy
Konwencje nazewnicze:
- PascalCase
- Użyj rzeczownik lub wyrażenie rzeczownik do nazwy klasy.
- Dodaj odpowiednie klasy przyrostka Kiedy pod-uznawanie Innym rodzajem jeśli to możliwe.
- Prefiks nazwy klasy z przestrzeni nazw.
- Przykłady: TexyParser, NHttpRequest
Styl pisania:
- Brace jest zawsze napisane w wierszu pod nazwą klasy.
- Każda klasa musi się blok dokumentacji zgodna ze standardem phpDocumentor.
- Dowolny kod w klasie musi być wcięty cztery przestrzenie.
Umieszczanie dodatkowego kodu w pliku klasy jest dozwolone, ale odradzane (statyczne wywołanie konstruktora jest dozwolone). W prace plików, dwie puste linie muszą oddzielne klasy z dodatkowego kodu PHP w pliku.
Członkowie tej klasy muszą być zgodne celu realizacji:
- Użytkownik Zmienne
- Publiczny
- chroniony
- prywatny
- Konstruktora, Destructor
- Nieruchomości
- Metody
- Publiczny
- chroniony
- prywatny
Ostatecznym przodek wszystkich instantiable klas powinny być nUstawienia. Ostatecznym przodek wszystkich klas powinny być uninstantiable NClass.
Interfejsów
Interfejs klasy muszą przestrzegać tej samej konwencji i innych klasach, jednak musi kończyć się słowem Interface . Przykład: DibiDriverInterface
Zmiennych
Konwencje nazewnicze:
- CamelCase
- Zmienne i właściwości powinny opisywać nie podmiot rodzaj lub wielkość.
- Nie zawiera nazwę klasy dominującej w nazwę i mienia.
Do zmiennych klasy członek i oświadczył, że są private , pierwszy znak zmiennej nazwa może być jednym podkreślenia w celu poprawy czytelności. Jest to jedyna możliwa do przyjęcia wykorzystanie podkreślenia w nazwie zmiennej. Państwa zadeklarowane zmienne public lub protected Niech nie zaczyna się od podkreślenia. var budowy nie jest dozwolone.
Zmienne powinny być zawsze w pełnych praktyczne. nazw zmiennych Tirsa jak susze $i i $n są zniechęceni do innych celów niż pętli Najmniejszy Konteksty.
Zmienne muszą posiadać blok dokumentacji @ var dyrektywy i określonego typu.
Nieruchomości
Właściwości OWP wsparcie zapewniane przez nUstawienia. muszą oni przestrzegać tej samej konwencji i innych zmiennych. Musi być poprzedzona Visna udostępniające get lub set (po dużej litery) i zadeklarowane jako public . Getter jest wymagane, seter jest opcjonalne.
Przykład:
public function getName()
public function setName()
$obj ->name Stałe
Muszą one zawsze wszystkie litery skapitalizowane, oddzielonych znaków podkreślenia.
Przykład: CONTENT_TEXTUAL, FIELD_NUMERIC
Stałe muszą być zdefiniowane jako członkowie klasy za pomocą const budowy. Definiowanie stałych w zasięgu globalnym z define jest dozwolone, ale odradzane.
Funkcje i metody
Konwencje nazewnicze:
- CamelCase
- Spróbuj użyć czasownika lub czasownika-pair obiektu.
- Jeśli metoda zwraca wartość logiczną, spróbować z prefiksem nazwy "jest", "może", "h".
- Nazwy powinny być gadatliwy jest to praktyczne w celu zwiększenia zrozumiałości kodu.
- Przykłady: fetchPairs (), getElementById (), isSubmitted ()
Funkcje w zasięgu globalnym są odradzane, ale jest dozwolone (z wyjątkiem rozszerzenia metod). Zaleca się, aby funkcje założeniu powinny być opakowane w statycznej klasie.
Metody muszą zawsze deklarować ich widoczność przy użyciu jednej z prywatnych, chronione lub publiczne konstrukcji.
Jak klasy, Brace jest zawsze napisane w wierszu pod nazwą funkcji. Nie ma przestrzeni pomiędzy nazwą funkcji a nawiasem otwarcia argumenty.
To jest przykład deklaracji funkcji w klasie do zaakceptowania:
/**
* Documentation Block Here
*/
class Foo
{
/**
* Documentation Block Here
*/
public function verb()
{
// entire content of function
// must be indented four spaces
}
} Wartość zwrotu nie może w nawiasach BE. Może to czytelność Hinder, a także może złamać kod, jeśli metoda jest zmiana Później zwraca referencje.
Sposób funkcjonowania i użytkowania
Argumenty funkcji są oddzielone jedną spacją końcu po ogranicznik przecinkami. To jest przykład dopuszczalne połączenie funkcji funkcję, która przyjmuje trzy argumenty:
fooBar( 1 , 2 , 3 ); Połączenia w czasie przejazdu przez odniesienie jest zabronione.
Których argumenty dla funkcji dozwolone tablic, wywołanie funkcji może zawierać "tablicy" budowę i może być Into Split wielu wierszy w celu zwiększenia czytelności. Przypadków, w założeniu, Standardy tablice do pisania nadal stosuje:
fooBar( array ( 1 , 2 , 3 ), 2 , 3 );
fooBar( 1 , 2 , array (
'firstKey' => 'firstValue' ,
'secondKey' => 'secondValue' ,
), 3 , 4 ); Rozszerzenie metody
Rozszerzenie metody są OWP wsparcie zapewniane przez nUstawienia. Muszą one spełniać te same konwencje i inne metody, ale są one zgłoszone w zasięgu globalnym i prefiksem {Class name}_prototype_ . Pierwszy parametr musi być podpowiedź typu obiektu.
Przykład:
function MyClass_prototype_newMethod(MyClass $obj ) Instrukcje sterujące
Instrukcje sterujące w oparciu o konstrukcje if oraz elseif Musi mieć jednolitej przestrzeni przed nawiasem otwarcie warunkowe i jednego miejsca po nawiasem zamykającym.
Nawiasu otwierającego jest napisane na tej samej linii co instrukcji warunkowej. Zamknięcia jest zawsze Brace Napisał na jej własnej linii. Wszelkie treści w szelki wcięte Must Be cztery przestrzenie.
if ( $a != 2 ) {
$a = 2 ;
} Dla "jeśli" stwierdzenia, że to "elseif" lub "inny", formatowanie i musi być tez przykłady:
if ( $a != 2 ) {
$a = 2 ;
} elseif ( $a == 3 ) {
$a = 4 ;
} else {
$a = 7 ;
} Pisemne sprawozdanie z kontroli "switch" musi budować ma jednolitej przestrzeni przed nawiasem otwarcia instrukcji warunkowej, a także pojedyncze miejsca po nawiasem zamykającym.
Cała zawartość ramach każdego "przypadku" (lub domyślnie) oświadczenie musi być wcięty cztery przestrzenie.
switch ( $numPeople ) {
case 1 :
break ;
case 2 :
break ;
default :
break ;
} Czasami dobrze jest do napisania oświadczenia sprawie, która wchodzi do następnej sprawy nie przerwie, powrót w tym przypadku. W sprawach tego lokalu odróżnić od błędów, każdym przypadku przerwania lub oświadczenia zostały pominięte WHERE instrukcji return musi zawierać wpis "/ / break celowo pominięta".
Baz danych
- Użyj znaków alfanumerycznych.
- Wybierz jedną stronę dla wszystkich identyfikatorów:
- małe wykorzystanie słów i podkreślenia
_oddzielić słowa - Lub camelCaps wykorzystania
- małe wykorzystanie słów i podkreślenia
- Wybierz krótkie, jednoznaczne nazwy, używając nie więcej niż opcja jeden lub dwa wyrazy.
- Unikać skrócona, łączone lub acronymic nazw.
Tabele:
- Używać liczby mnogiej nazwy tabeli.
- tablice numeru z nazwą tabeli odnoszą się do (np.
order_statusluborderStatus,order_type, itp.). - Do tabeli skrzyżowania (które zajmują się tym mana mana relacji), powiązać nazwy dwie tabele:
{linking-table}_2_{related-table}
Kolumny:
- Użyj pojedynczej nazwy kolumn.
- Nie prefiks kolumny z nazwami nazwę tabeli.
- Kluczy podstawowych Musi mieć nazwę
id.- Jeżeli więcej niż jedno pole stanowi klucz, sufiks wszystkie z
id(lubpk?)
- Jeżeli więcej niż jedno pole stanowi klucz, sufiks wszystkie z
- Klucz obcy nazwy powinny być wskazana nazwa tabeli w liczbie pojedynczej literą
id.- Sprawia, że stół do których się odnoszą zupełnie oczywiste.
- Jeżeli istnieje kilka kluczy obcych odniesienie samej tabeli, przedrostek nazwę klucza obcego z przymiotnik odpowiednio opisowa (np.
lead_person_id/leadPersonId,technical_person_id/technicalPersonIditp., które w sposób przejrzysty odniesieniaidwpersonstabela).
- Lista klucz podstawowy w tabeli pierwszej, a następnie kluczy obcych.
- Boolean polach należy podać nazwiska jak
is_deleted(lubisDeleted)has_permission(lubhasPermission). Jeżeli pole daty posiada i / lub informacji w czasie, słowodatelubtimepowinien pojawić się gdzieś w polu Nazwa.
Widoki:
- Według tych samych zasad, które mają zastosowanie do nazw tabel z pewnymi wyjątkami:
- Może być widok oraz połączenie kilku stołach w oparciu o stan i dołączyć tym samym skutecznie reprezentujących dwa podmioty. W tym przypadku nazwy, należy rozważyć połączenie tabel bazy.
SQL styl pisania:
- Nie używaj zastrzeżonych wersji i zniszczyć przenoszenia (
INSERT INTO ... VALUESvsINSERT ... SET) - Format SQL wiele linii:
SELECT *
FROM [customers]
WHERE [ name ] LIKE 'Peter%'
ORDER BY [ name ] Mity kolumn przedrostka nazwy z nazwą tabeli
- zapobiega nazwy pól starcia z reservered słowa → odsyłający tabela.pole zapobiega leci Better
- Near Field tworzy unikatowe nazwy, często uproszczenia zapytań SQL projektowanie i kodowanie → odsyłający tabela.pole Czy to samo miejsce pracy
- utrzymuje Semantic Przejrzystość nazwy pól Używając aliasów tabel (np. SELECT i FROM a.activity_name działalności) → Zdecydowanie nie. Co Sam, dwie tabele w przyłączyć? Odsyłający alias.fieldname jest właściwy sposób.
Typy danych w MySQL:
- Varbinary BINARY i realizacji jest stabilny grudnia MySQL 5.0.19
- boolean zastąpić "tinyint (1) NOT NULL DEFAULT" 0 "(ENUM nie jest zalecane)
- W trybie non-ścisłe ENUM może zawierać pusty ciąg





