(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:

  1. Użytkownik Zmienne
    1. Publiczny
    2. chroniony
    3. prywatny
  2. Konstruktora, Destructor
  3. Nieruchomości
  4. Metody
    1. Publiczny
    2. chroniony
    3. 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:
    1. małe wykorzystanie słów i podkreślenia _ oddzielić słowa
    2. Lub camelCaps wykorzystania
  • 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_status lub orderStatus , 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 (lub pk ?)
  • 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 / technicalPersonId itp., które w sposób przejrzysty odniesienia id w persons tabela).
  • Lista klucz podstawowy w tabeli pierwszej, a następnie kluczy obcych.
  • Boolean polach należy podać nazwiska jak is_deleted (lub isDeleted ) has_permission (lub hasPermission ). Jeżeli pole daty posiada i / lub informacji w czasie, słowo date lub time powinien 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 ... VALUES vs INSERT ... 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: