SlideShare a Scribd company logo
1 of 18
PSR
czyli dobre praktyki programistyczne
Prepared for: PHPstock
Prepared by: Damian Michalski
Aurora Creation / PHP Magento Developer
Czym jest PSR?
PSR (PHP Standard Recommendation) - jest to zbiór wytycznych co do programowania w języku PHP.
Został on wprowadzony przez PHP Framework Interop Group (PHP-FIG)
Zbiór PSR składa się w tej chwili z 18 zestawów wytycznych.
Przedstawiamy 3 z nich:
● PSR-0: Autoloading Standard
● PSR-2: Coding Style Guide
● PSR-3: Logger Interface
● Łatwość współpracy
● Niższy próg wejścia w ‘cudzy’ kod
● Dobrze sformatowany kod z dobrym
nazewnictwem czyta się dużo szybciej
niżeli chaotycznie napisany kod ze
zmiennymi o nazwie „x” czy „y”
● Kod tworzymy przede wszystkim dla
innych (programistów) a nie dla
maszyny
Zalety PSR
● Bullet 01
● Bullet 02
● Bullet 03
● ….
● Magento: PSR-1 PSR-2
● Woocommerce: PSR?!
● Prestashop: PSR-1 PSR-
2
Jak do tego podchodzą inni?
● Bullet 01
● Bullet 02
● Bullet 03
● ….
PSR-0: Autoloading Standard
PSR-0 czyli stary standard zastąpiony przez PSR-4
— są to standardy dla automatycznego ładowania klas na podstawie struktury
katalogów w projekcie
W 2014 PSR-0 został oznaczony jako przestarzały.
PSR-4 jest teraz zalecany jako alternatywa.
PSR-0
● W pełni kwalifikowana przestrzeń nazw i klasa muszą mieć następującą strukturę
<Vendor Name>(<Namespace>)*<Class Name>
● Znak _ ma specjalne znaczenie w obszarze nazw.
● W pełni kwalifikowana przestrzeń nazw i klasa są sufiksami .php podczas ładowania z systemu plików.
Dlaczego PSR-4 wyparło PSR-0?
PSR-0 działa jedynie w przypadku, gdyby na świecie istniały jedynie klasy PHP.
Jednak, gdy do projektu dodajemy elementy spoza PHP, powstaje problem:
w jaki sposób umieścić je w projekcie?
Gdzie je zmieścić?
Projekt może mieć podkatalogi
np. doc, examples, license, css, js, img, src na kod PHP.
Wtedy należy umieścić podkatalog src w nazwie klasy.
Powstaje wówczas np. klasa:
userProjektPierwszysrcModułPierwszyKlasa
Projekt
- dokumentacje,
- przykłady,
- testy jednostkowe,
- style,
- grafiki
- inne
Wady PSR-0 oraz dlaczego lepsze jest PSR-4.
Najważniejsza zmiana to sposób traktowania ścieżki do projektu. Tym razem zamiast jednej, możemy mieć wiele ścieżek,
każda zdefiniowana dla jakiegoś prefiksu nazwy klasy.
Przykłady:
userModulPierwszy => /vendor/user/ModulA/src/php
userModulDrugi => /vendor/user/ModulB/classes/
Co więcej, możemy przypisać kilka ścieżek do jednego prefiksu:
userModulPierwszy => /vendor/user/ModulA/src/php
userModulPierwszy => /vendor/user/PoprawkiDoModuluA/php/classes
Autoloader gdy już dopasuje prefiks nazwy do jakiejś ścieżki traktuje resztę nazwy w
klasyczny sposób – rozbija na podkatalogi i szuka pliku php.
PSR-4
● Termin „klasa” odnosi się do klas, interfejsów, cech i innych podobnych struktur.
Np.:
<NamespaceName>(<SubNamespaceNames>)*<ClassName>
● Implementacje autoloadera NIE MOGĄ zgłaszać wyjątków,
NIE MOGĄ zgłaszać błędów o dowolnym poziomie
i NIE POWINNY zwracać wartości.
PSR-2: Coding Style Guide
PSR-2 — styl/standard kodowania w PHP (zbiór zasad w który wchodzi PSR-1)
● Kod MUSI postępować zgodnie z „przewodnikiem po stylu kodowania” PSR [ PSR-1 ].
● NIE MOŻE istnieć twardy limit długości linii; miękki limit MUSI wynosić 120 znaków; wiersze MUSZĄ mieć 80 znaków lub mniej.
● Kod MUSI używać 4 spacji do wcięcia, a nie tabulacji.
● Po namespace deklaracji MUSI znajdować się jedna pusta linia, a za blokiem use deklaracji MUSI znajdować się jedna pusta
linia.
● Klamry otwierające dla klas MUSZĄ przejść do następnej linii, a klamry otwierające MUSZĄ przejść do następnej linii po ciele.
● Nawiasy otwierające dla metod MUSZĄ przejść do następnej linii, a nawiasy zamykające MUSZĄ przejść do następnej linii po
ciele.
● Nawiasy otwierające dla struktur kontrolnych MUSZĄ iść na tej samej linii, a nawiasy zamykające MUSZĄ przejść na następną
linię za ciałem.
● Nawiasy otwierające dla struktur kontrolnych NIE MOGĄ mieć po sobie spacji, a nawiasy zamykające dla struktur kontrolnych
NIE MOGĄ mieć wcześniej spacji.
PSR-1 — styl/standard kodowania w PHP
● Pliki muszą używać tylko <?php i <?= tagi.
● Pliki powinny albo zadeklarować symbole (klasy, funkcje, stałe, etc.) lub powodować skutki uboczne
(np generować wyjście, zmień ustawienia .ini, itp), ale nie należy robić jedno i drugie.
● Przestrzenie nazw i klasy MUSZĄ być zgodne z PSR „autoloadingu”: [ PSR-0 , PSR-4 ].
● Stałe klas MUSZĄ być deklarowane wielkimi literami z separatorami podkreślenia.
PSR-2 — styl/standard kodowania w PHP (zbiór zasad w który wchodzi PSR-1),
● Kod MUSI postępować zgodnie z „przewodnikiem po stylu kodowania” PSR [ PSR-1 ].
● Kod MUSI używać 4 spacji do wcięcia, a nie tabulacji.
● NIE MOŻE istnieć twardy limit długości linii; miękki limit MUSI wynosić 120 znaków; wiersze MUSZĄ mieć 80 znaków lub mniej.
● Po namespace deklaracji MUSI znajdować się jedna pusta linia, a za blokiem use deklaracji MUSI znajdować się jedna pusta linia
.
● Klamry otwierające dla klas MUSZĄ przejść do następnej linii, a klamry otwierające MUSZĄ przejść do następnej linii po ciele.
● Nawiasy otwierające dla metod MUSZĄ przejść do następnej linii, a nawiasy zamykające MUSZĄ przejść do następnej linii po
ciele.
● Nawiasy otwierające dla struktur kontrolnych MUSZĄ iść na tej samej linii, a nawiasy zamykające MUSZĄ przejść na następną
linię za ciałem.
● Nawiasy otwierające dla struktur kontrolnych NIE MOGĄ mieć po sobie spacji, a nawiasy zamykające dla struktur kontrolnych NIE
MOGĄ mieć wcześniej spacji.
PSR-2 — styl/standard kodowania w PHP (zbiór zasad w który wchodzi PSR-1),
PSR-3: Logger Interface
Jest osiem głównych poziomów logów
const DEBUG = 'debug';
i osiem odpowiadających im metod w klasie (interfejs):
public function debug ($message, array $context = array());
W PSR-3 znajduje się osiem głównych poziomów logów (w tej kolejności):
● emergency - system jest bezużyteczny (unusable),
● alert - należy podjąć jakąś akcje np.: niedostępna baza danych, strona przestała działać, …,
● critical - przypadek krytyczny; np.: wystąpił wyjątek (programista nawalił), niedostępny komponent w kodzie,
● error - błąd podczas wykonywania ale nie zmuszający do natychmiastowej interwencji, jednak ważne aby był
zalogowany,
● warning - wyjątek po części akceptowalny (nie błąd), np.: używanie przestarzałego API, lub niepożądane użycie API,
● notice - normalne zdarzenie, które warto zalogować (ale ważniejsze od zdarzenia info),
● info - zdarzenie informacyjne rozszerzające logowane informacje, np.: User się zalogował, logi z SQL,
● debug - informacje szczegółowe, jeszcze bardziej techniczne i nawet sugerujące optymalizację lub podające zużycie
zasobów lub czasu,
● metoda log() - jest to ostatnia, dziewiąta metoda działa tak samo jak poprzednie tylko jako pierwszy argument
przyjmuje poziom logowania. W praktyce to ta metoda przeważnie zapisuje logi. Pozostałe przeważnie tylko ją
wywołują.
Potrzebujesz wiedzieć więcej?
Napisz do nas!
biuro@auroracreation.pl

More Related Content

What's hot

Патологія ліпідного обміну. Ожиріння. Lipids metabolism disorders.Obesity
Патологія ліпідного обміну. Ожиріння. Lipids metabolism disorders.ObesityПатологія ліпідного обміну. Ожиріння. Lipids metabolism disorders.Obesity
Патологія ліпідного обміну. Ожиріння. Lipids metabolism disorders.ObesityVasyl Nagibin
 
харчові добавки
харчові добавкихарчові добавки
харчові добавкиdamasta
 
патофізіологія етіологія та патогенез
патофізіологія етіологія та патогенезпатофізіологія етіологія та патогенез
патофізіологія етіологія та патогенезVictor Dosenko
 
Принципи клініко-лабораторної діагностики лейкозів
Принципи клініко-лабораторної діагностики лейкозівПринципи клініко-лабораторної діагностики лейкозів
Принципи клініко-лабораторної діагностики лейкозівssuser1ac3fc
 
Посадова інструкція фахівця соціальної роботи у громаді (проект)
Посадова інструкція фахівця соціальної роботи у громаді (проект)Посадова інструкція фахівця соціальної роботи у громаді (проект)
Посадова інструкція фахівця соціальної роботи у громаді (проект)UNDP Ukraine
 
Кінетика.Каталіз
Кінетика.КаталізКінетика.Каталіз
Кінетика.Каталізkassy2003
 
історія хвороби неоонатологія_сава
історія хвороби неоонатологія_саваісторія хвороби неоонатологія_сава
історія хвороби неоонатологія_саваNazarNazar43
 
8-класс. Графикалык интерфейс
8-класс. Графикалык интерфейс8-класс. Графикалык интерфейс
8-класс. Графикалык интерфейсKasymbek Junusaliev
 
Проект кваліфікаційної характеристики соціальних працівників
Проект кваліфікаційної характеристики соціальних працівників Проект кваліфікаційної характеристики соціальних працівників
Проект кваліфікаційної характеристики соціальних працівників UNDP Ukraine
 
патофізіологія нирок
патофізіологія  нирокпатофізіологія  нирок
патофізіологія нирокVictor Dosenko
 
професіограма
професіограмапрофесіограма
професіограмаIrina Kalytovcka
 
стандартизація лекція 1 2
стандартизація лекція 1 2стандартизація лекція 1 2
стандартизація лекція 1 2galushko29
 
Державний стандарт соціальної послуги соціального супроводу (проект)
Державний стандарт соціальної  послуги соціального супроводу (проект)Державний стандарт соціальної  послуги соціального супроводу (проект)
Державний стандарт соціальної послуги соціального супроводу (проект)UNDP Ukraine
 
AIoT智能居家燈控系統
AIoT智能居家燈控系統AIoT智能居家燈控系統
AIoT智能居家燈控系統艾鍗科技
 
патофізіологія серця
патофізіологія серцяпатофізіологія серця
патофізіологія серцяVictor Dosenko
 

What's hot (20)

Патологія ліпідного обміну. Ожиріння. Lipids metabolism disorders.Obesity
Патологія ліпідного обміну. Ожиріння. Lipids metabolism disorders.ObesityПатологія ліпідного обміну. Ожиріння. Lipids metabolism disorders.Obesity
Патологія ліпідного обміну. Ожиріння. Lipids metabolism disorders.Obesity
 
передача параметрів в функції
передача параметрів в функціїпередача параметрів в функції
передача параметрів в функції
 
харчові добавки
харчові добавкихарчові добавки
харчові добавки
 
патофізіологія етіологія та патогенез
патофізіологія етіологія та патогенезпатофізіологія етіологія та патогенез
патофізіологія етіологія та патогенез
 
Принципи клініко-лабораторної діагностики лейкозів
Принципи клініко-лабораторної діагностики лейкозівПринципи клініко-лабораторної діагностики лейкозів
Принципи клініко-лабораторної діагностики лейкозів
 
Посадова інструкція фахівця соціальної роботи у громаді (проект)
Посадова інструкція фахівця соціальної роботи у громаді (проект)Посадова інструкція фахівця соціальної роботи у громаді (проект)
Посадова інструкція фахівця соціальної роботи у громаді (проект)
 
остеопороз
остеопорозостеопороз
остеопороз
 
Кінетика.Каталіз
Кінетика.КаталізКінетика.Каталіз
Кінетика.Каталіз
 
історія хвороби неоонатологія_сава
історія хвороби неоонатологія_саваісторія хвороби неоонатологія_сава
історія хвороби неоонатологія_сава
 
8-класс. Графикалык интерфейс
8-класс. Графикалык интерфейс8-класс. Графикалык интерфейс
8-класс. Графикалык интерфейс
 
Triangulos
TriangulosTriangulos
Triangulos
 
Проект кваліфікаційної характеристики соціальних працівників
Проект кваліфікаційної характеристики соціальних працівників Проект кваліфікаційної характеристики соціальних працівників
Проект кваліфікаційної характеристики соціальних працівників
 
патофізіологія нирок
патофізіологія  нирокпатофізіологія  нирок
патофізіологія нирок
 
професіограма
професіограмапрофесіограма
професіограма
 
стандартизація лекція 1 2
стандартизація лекція 1 2стандартизація лекція 1 2
стандартизація лекція 1 2
 
Державний стандарт соціальної послуги соціального супроводу (проект)
Державний стандарт соціальної  послуги соціального супроводу (проект)Державний стандарт соціальної  послуги соціального супроводу (проект)
Державний стандарт соціальної послуги соціального супроводу (проект)
 
AIoT智能居家燈控系統
AIoT智能居家燈控系統AIoT智能居家燈控系統
AIoT智能居家燈控系統
 
6 3
6 36 3
6 3
 
Lex tmsl 16v1
Lex tmsl 16v1Lex tmsl 16v1
Lex tmsl 16v1
 
патофізіологія серця
патофізіологія серцяпатофізіологія серця
патофізіологія серця
 

Similar to PSR czyli dobre praktyki programistyczne

Programowanie obiektowe na przykładzie języka PHP oraz PSR
Programowanie obiektowe na przykładzie języka PHP oraz PSRProgramowanie obiektowe na przykładzie języka PHP oraz PSR
Programowanie obiektowe na przykładzie języka PHP oraz PSRInterSynergy
 
Programowanie obiektowe na przykładzie języka PHP oraz PSR
Programowanie obiektowe na przykładzie języka PHP oraz PSRProgramowanie obiektowe na przykładzie języka PHP oraz PSR
Programowanie obiektowe na przykładzie języka PHP oraz PSRPrzemysław Ciurzyński
 
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)Codesushi.co (CODESUSHI LLC)
 
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPPiotr Horzycki
 
Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)adamhmetal
 
Zwiększanie produktywności programisty php
Zwiększanie produktywności programisty phpZwiększanie produktywności programisty php
Zwiększanie produktywności programisty phpadamhmetal
 
Skalowanie PostgreSQL @ DBConf.PL 2014
Skalowanie PostgreSQL @ DBConf.PL 2014Skalowanie PostgreSQL @ DBConf.PL 2014
Skalowanie PostgreSQL @ DBConf.PL 2014Filip Rembialkowski
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPLaravel Poland MeetUp
 
Adam Roman - Automatyczne projektowanie testów
Adam Roman - Automatyczne projektowanie testówAdam Roman - Automatyczne projektowanie testów
Adam Roman - Automatyczne projektowanie testówkraqa
 
Tworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego koduTworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego kodupabloware
 
Erlang
ErlangErlang
Erlangkonryd
 
201105 OWASP Fuzzing interpretera PHP
201105 OWASP Fuzzing interpretera PHP201105 OWASP Fuzzing interpretera PHP
201105 OWASP Fuzzing interpretera PHPLogicaltrust pl
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlSebastian Marek
 
Python szybki start
Python   szybki startPython   szybki start
Python szybki startSages
 

Similar to PSR czyli dobre praktyki programistyczne (20)

Programowanie obiektowe na przykładzie języka PHP oraz PSR
Programowanie obiektowe na przykładzie języka PHP oraz PSRProgramowanie obiektowe na przykładzie języka PHP oraz PSR
Programowanie obiektowe na przykładzie języka PHP oraz PSR
 
Programowanie obiektowe na przykładzie języka PHP oraz PSR
Programowanie obiektowe na przykładzie języka PHP oraz PSRProgramowanie obiektowe na przykładzie języka PHP oraz PSR
Programowanie obiektowe na przykładzie języka PHP oraz PSR
 
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
 
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
 
Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)
 
Zwiększanie produktywności programisty php
Zwiększanie produktywności programisty phpZwiększanie produktywności programisty php
Zwiększanie produktywności programisty php
 
Skalowanie PostgreSQL @ DBConf.PL 2014
Skalowanie PostgreSQL @ DBConf.PL 2014Skalowanie PostgreSQL @ DBConf.PL 2014
Skalowanie PostgreSQL @ DBConf.PL 2014
 
Open Power Template
Open Power TemplateOpen Power Template
Open Power Template
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
Adam Roman - Automatyczne projektowanie testów
Adam Roman - Automatyczne projektowanie testówAdam Roman - Automatyczne projektowanie testów
Adam Roman - Automatyczne projektowanie testów
 
Tworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego koduTworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego kodu
 
Sposoby przedstawiania algorytmu
Sposoby przedstawiania algorytmuSposoby przedstawiania algorytmu
Sposoby przedstawiania algorytmu
 
Erlang
ErlangErlang
Erlang
 
201105 OWASP Fuzzing interpretera PHP
201105 OWASP Fuzzing interpretera PHP201105 OWASP Fuzzing interpretera PHP
201105 OWASP Fuzzing interpretera PHP
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPl
 
Isyp07
Isyp07Isyp07
Isyp07
 
Php5
Php5Php5
Php5
 
Python szybki start
Python   szybki startPython   szybki start
Python szybki start
 
Wprowadzenie do PHPUnit
Wprowadzenie do PHPUnitWprowadzenie do PHPUnit
Wprowadzenie do PHPUnit
 
OpenEmbedded
OpenEmbeddedOpenEmbedded
OpenEmbedded
 

More from PHPstokPHPstok

Jak ograniczyć używanie tablic w PHP.pptx
Jak ograniczyć używanie tablic w PHP.pptxJak ograniczyć używanie tablic w PHP.pptx
Jak ograniczyć używanie tablic w PHP.pptxPHPstokPHPstok
 
Blaski i cienie pracy Project Managera.pptx
Blaski i cienie pracy Project Managera.pptxBlaski i cienie pracy Project Managera.pptx
Blaski i cienie pracy Project Managera.pptxPHPstokPHPstok
 
Zarządzanie złożonością
Zarządzanie złożonościąZarządzanie złożonością
Zarządzanie złożonościąPHPstokPHPstok
 
Najczęstsze błędy początkujących programistów PHP
Najczęstsze błędy początkujących programistów PHPNajczęstsze błędy początkujących programistów PHP
Najczęstsze błędy początkujących programistów PHPPHPstokPHPstok
 
Bezpieczeństwo aplikacji webowych
Bezpieczeństwo aplikacji webowychBezpieczeństwo aplikacji webowych
Bezpieczeństwo aplikacji webowychPHPstokPHPstok
 
Wzorce projektowe w praktyce
Wzorce projektowe w praktyceWzorce projektowe w praktyce
Wzorce projektowe w praktycePHPstokPHPstok
 
Sztuka samodoskonalenia programisty
Sztuka samodoskonalenia programistySztuka samodoskonalenia programisty
Sztuka samodoskonalenia programistyPHPstokPHPstok
 
Testy jednostkowe - PHPUnit
Testy jednostkowe - PHPUnitTesty jednostkowe - PHPUnit
Testy jednostkowe - PHPUnitPHPstokPHPstok
 

More from PHPstokPHPstok (14)

Jak ograniczyć używanie tablic w PHP.pptx
Jak ograniczyć używanie tablic w PHP.pptxJak ograniczyć używanie tablic w PHP.pptx
Jak ograniczyć używanie tablic w PHP.pptx
 
Blaski i cienie pracy Project Managera.pptx
Blaski i cienie pracy Project Managera.pptxBlaski i cienie pracy Project Managera.pptx
Blaski i cienie pracy Project Managera.pptx
 
Refaktoryzacja
RefaktoryzacjaRefaktoryzacja
Refaktoryzacja
 
PHP 8.1
PHP 8.1PHP 8.1
PHP 8.1
 
Zarządzanie złożonością
Zarządzanie złożonościąZarządzanie złożonością
Zarządzanie złożonością
 
Clean Code
Clean CodeClean Code
Clean Code
 
Testy mutacyjne
Testy mutacyjneTesty mutacyjne
Testy mutacyjne
 
Najczęstsze błędy początkujących programistów PHP
Najczęstsze błędy początkujących programistów PHPNajczęstsze błędy początkujących programistów PHP
Najczęstsze błędy początkujących programistów PHP
 
Bezpieczeństwo aplikacji webowych
Bezpieczeństwo aplikacji webowychBezpieczeństwo aplikacji webowych
Bezpieczeństwo aplikacji webowych
 
Wzorce projektowe w praktyce
Wzorce projektowe w praktyceWzorce projektowe w praktyce
Wzorce projektowe w praktyce
 
Sztuka samodoskonalenia programisty
Sztuka samodoskonalenia programistySztuka samodoskonalenia programisty
Sztuka samodoskonalenia programisty
 
Testy jednostkowe - PHPUnit
Testy jednostkowe - PHPUnitTesty jednostkowe - PHPUnit
Testy jednostkowe - PHPUnit
 
Docker
DockerDocker
Docker
 
SOLID
SOLIDSOLID
SOLID
 

PSR czyli dobre praktyki programistyczne

  • 1. PSR czyli dobre praktyki programistyczne Prepared for: PHPstock Prepared by: Damian Michalski Aurora Creation / PHP Magento Developer
  • 2. Czym jest PSR? PSR (PHP Standard Recommendation) - jest to zbiór wytycznych co do programowania w języku PHP. Został on wprowadzony przez PHP Framework Interop Group (PHP-FIG) Zbiór PSR składa się w tej chwili z 18 zestawów wytycznych. Przedstawiamy 3 z nich: ● PSR-0: Autoloading Standard ● PSR-2: Coding Style Guide ● PSR-3: Logger Interface
  • 3. ● Łatwość współpracy ● Niższy próg wejścia w ‘cudzy’ kod ● Dobrze sformatowany kod z dobrym nazewnictwem czyta się dużo szybciej niżeli chaotycznie napisany kod ze zmiennymi o nazwie „x” czy „y” ● Kod tworzymy przede wszystkim dla innych (programistów) a nie dla maszyny Zalety PSR ● Bullet 01 ● Bullet 02 ● Bullet 03 ● ….
  • 4. ● Magento: PSR-1 PSR-2 ● Woocommerce: PSR?! ● Prestashop: PSR-1 PSR- 2 Jak do tego podchodzą inni? ● Bullet 01 ● Bullet 02 ● Bullet 03 ● ….
  • 6. PSR-0 czyli stary standard zastąpiony przez PSR-4 — są to standardy dla automatycznego ładowania klas na podstawie struktury katalogów w projekcie W 2014 PSR-0 został oznaczony jako przestarzały. PSR-4 jest teraz zalecany jako alternatywa.
  • 7. PSR-0 ● W pełni kwalifikowana przestrzeń nazw i klasa muszą mieć następującą strukturę <Vendor Name>(<Namespace>)*<Class Name> ● Znak _ ma specjalne znaczenie w obszarze nazw. ● W pełni kwalifikowana przestrzeń nazw i klasa są sufiksami .php podczas ładowania z systemu plików.
  • 8. Dlaczego PSR-4 wyparło PSR-0? PSR-0 działa jedynie w przypadku, gdyby na świecie istniały jedynie klasy PHP. Jednak, gdy do projektu dodajemy elementy spoza PHP, powstaje problem: w jaki sposób umieścić je w projekcie? Gdzie je zmieścić? Projekt może mieć podkatalogi np. doc, examples, license, css, js, img, src na kod PHP. Wtedy należy umieścić podkatalog src w nazwie klasy. Powstaje wówczas np. klasa: userProjektPierwszysrcModułPierwszyKlasa Projekt - dokumentacje, - przykłady, - testy jednostkowe, - style, - grafiki - inne
  • 9. Wady PSR-0 oraz dlaczego lepsze jest PSR-4. Najważniejsza zmiana to sposób traktowania ścieżki do projektu. Tym razem zamiast jednej, możemy mieć wiele ścieżek, każda zdefiniowana dla jakiegoś prefiksu nazwy klasy. Przykłady: userModulPierwszy => /vendor/user/ModulA/src/php userModulDrugi => /vendor/user/ModulB/classes/ Co więcej, możemy przypisać kilka ścieżek do jednego prefiksu: userModulPierwszy => /vendor/user/ModulA/src/php userModulPierwszy => /vendor/user/PoprawkiDoModuluA/php/classes Autoloader gdy już dopasuje prefiks nazwy do jakiejś ścieżki traktuje resztę nazwy w klasyczny sposób – rozbija na podkatalogi i szuka pliku php.
  • 10. PSR-4 ● Termin „klasa” odnosi się do klas, interfejsów, cech i innych podobnych struktur. Np.: <NamespaceName>(<SubNamespaceNames>)*<ClassName> ● Implementacje autoloadera NIE MOGĄ zgłaszać wyjątków, NIE MOGĄ zgłaszać błędów o dowolnym poziomie i NIE POWINNY zwracać wartości.
  • 12. PSR-2 — styl/standard kodowania w PHP (zbiór zasad w który wchodzi PSR-1) ● Kod MUSI postępować zgodnie z „przewodnikiem po stylu kodowania” PSR [ PSR-1 ]. ● NIE MOŻE istnieć twardy limit długości linii; miękki limit MUSI wynosić 120 znaków; wiersze MUSZĄ mieć 80 znaków lub mniej. ● Kod MUSI używać 4 spacji do wcięcia, a nie tabulacji. ● Po namespace deklaracji MUSI znajdować się jedna pusta linia, a za blokiem use deklaracji MUSI znajdować się jedna pusta linia. ● Klamry otwierające dla klas MUSZĄ przejść do następnej linii, a klamry otwierające MUSZĄ przejść do następnej linii po ciele. ● Nawiasy otwierające dla metod MUSZĄ przejść do następnej linii, a nawiasy zamykające MUSZĄ przejść do następnej linii po ciele. ● Nawiasy otwierające dla struktur kontrolnych MUSZĄ iść na tej samej linii, a nawiasy zamykające MUSZĄ przejść na następną linię za ciałem. ● Nawiasy otwierające dla struktur kontrolnych NIE MOGĄ mieć po sobie spacji, a nawiasy zamykające dla struktur kontrolnych NIE MOGĄ mieć wcześniej spacji.
  • 13. PSR-1 — styl/standard kodowania w PHP ● Pliki muszą używać tylko <?php i <?= tagi. ● Pliki powinny albo zadeklarować symbole (klasy, funkcje, stałe, etc.) lub powodować skutki uboczne (np generować wyjście, zmień ustawienia .ini, itp), ale nie należy robić jedno i drugie. ● Przestrzenie nazw i klasy MUSZĄ być zgodne z PSR „autoloadingu”: [ PSR-0 , PSR-4 ]. ● Stałe klas MUSZĄ być deklarowane wielkimi literami z separatorami podkreślenia.
  • 14. PSR-2 — styl/standard kodowania w PHP (zbiór zasad w który wchodzi PSR-1), ● Kod MUSI postępować zgodnie z „przewodnikiem po stylu kodowania” PSR [ PSR-1 ]. ● Kod MUSI używać 4 spacji do wcięcia, a nie tabulacji. ● NIE MOŻE istnieć twardy limit długości linii; miękki limit MUSI wynosić 120 znaków; wiersze MUSZĄ mieć 80 znaków lub mniej. ● Po namespace deklaracji MUSI znajdować się jedna pusta linia, a za blokiem use deklaracji MUSI znajdować się jedna pusta linia . ● Klamry otwierające dla klas MUSZĄ przejść do następnej linii, a klamry otwierające MUSZĄ przejść do następnej linii po ciele. ● Nawiasy otwierające dla metod MUSZĄ przejść do następnej linii, a nawiasy zamykające MUSZĄ przejść do następnej linii po ciele. ● Nawiasy otwierające dla struktur kontrolnych MUSZĄ iść na tej samej linii, a nawiasy zamykające MUSZĄ przejść na następną linię za ciałem. ● Nawiasy otwierające dla struktur kontrolnych NIE MOGĄ mieć po sobie spacji, a nawiasy zamykające dla struktur kontrolnych NIE MOGĄ mieć wcześniej spacji.
  • 15. PSR-2 — styl/standard kodowania w PHP (zbiór zasad w który wchodzi PSR-1),
  • 16. PSR-3: Logger Interface Jest osiem głównych poziomów logów const DEBUG = 'debug'; i osiem odpowiadających im metod w klasie (interfejs): public function debug ($message, array $context = array());
  • 17. W PSR-3 znajduje się osiem głównych poziomów logów (w tej kolejności): ● emergency - system jest bezużyteczny (unusable), ● alert - należy podjąć jakąś akcje np.: niedostępna baza danych, strona przestała działać, …, ● critical - przypadek krytyczny; np.: wystąpił wyjątek (programista nawalił), niedostępny komponent w kodzie, ● error - błąd podczas wykonywania ale nie zmuszający do natychmiastowej interwencji, jednak ważne aby był zalogowany, ● warning - wyjątek po części akceptowalny (nie błąd), np.: używanie przestarzałego API, lub niepożądane użycie API, ● notice - normalne zdarzenie, które warto zalogować (ale ważniejsze od zdarzenia info), ● info - zdarzenie informacyjne rozszerzające logowane informacje, np.: User się zalogował, logi z SQL, ● debug - informacje szczegółowe, jeszcze bardziej techniczne i nawet sugerujące optymalizację lub podające zużycie zasobów lub czasu, ● metoda log() - jest to ostatnia, dziewiąta metoda działa tak samo jak poprzednie tylko jako pierwszy argument przyjmuje poziom logowania. W praktyce to ta metoda przeważnie zapisuje logi. Pozostałe przeważnie tylko ją wywołują.
  • 18. Potrzebujesz wiedzieć więcej? Napisz do nas! biuro@auroracreation.pl