ARK. 1System · Standardy

PSR — wspólne zasady PHP, które w WordPressie spotykają drugi, sprzeczny styl.

PSR to rekomendacje PHP-FIG, grupy twórców frameworków: jak nazywać i ładować klasy (PSR-4), jak formatować kod (PSR-12, dziś PER Coding Style) i jakie interfejsy wspólne mają mieć biblioteki (logi, cache, HTTP). Poza WordPressem to standard de facto. W WordPressie obowiązuje jego własny styl — taby, spacje w nawiasach, warunki Yoda — i te dwa światy spotykają się w każdej wtyczce pisanej przez programistę frameworków. Poniżej cała lista, różnice stylów i pomiar dwóch baz kodu Creato w obu standardach.

Źródło: PHP-FIG: lista PSR, PSR-4, PER Coding Style 3.1; odczyt 26.09.2026. Pomiar własny PHPCS 3.13.6 + WPCS 3.4.1. Opisy są naszym opracowaniem. Pozostałe standardy serii: WP Secure Coding (reguły bezpieczeństwa WPCS i bramka wtyczki).

PSR
2314 przyjętych · reszta wycofane, porzucone, szkice
Styl PHP-FIG
PER CS 3.1zastępuje PSR-12 (2019)
Creato Ping: PSR-12 / WordPress
436 / 4306naruszeń · 1558 linii
Motyw Creato: PSR-12 / WordPress
138 / 19 583naruszeń · 11 301 linii
RYS. 1Który styl pasuje do naszego kodunaruszenia na 1000 linii PHP · ciągła = PSR-12 · przerywana = WordPress

Oba nasze kody są pisane pod PSR, nie pod WordPress: motyw niemal idealnie (12,2 na 1000 linii, prawie same długie linie), wtyczka pół na pół — spacje i nawiasy jak w PSR, klamry i treść w jednej linii jak w żadnym. Styl WordPressa daje w obu tysiące zgłoszeń, prawie wszystkie do poprawy automatem.

TAB. 1Wszystkie PSR23 numerów · stan z php-fig.org
PSRTytułStatusZnaczenie dla wtyczki WordPressa
PSR-0Autoloading Standardwycofanyzastąpiony przez PSR-4
PSR-1Basic Coding StandardprzyjętyUTF-8 bez BOM, <?php, pliki albo deklarują, albo wykonują — nie oba
PSR-2Coding Style Guidewycofanyzastąpiony przez PSR-12
PSR-3Logger Interfaceprzyjęty—
PSR-4Autoloading Standardprzyjętyprzestrzeń nazw → katalog; Composer
PSR-5PHPDoc Standardszkic—
PSR-6Caching Interfaceprzyjęty—
PSR-7HTTP Message Interfaceprzyjęty—
PSR-8Huggable Interfaceporzucony—
PSR-9Security Advisoriesporzucony—
PSR-10Security Reporting Processporzucony—
PSR-11Container Interfaceprzyjęty—
PSR-12Extended Coding Style Guideprzyjętystyl; zastąpiony przez PER Coding Style
PSR-13Hypermedia Linksprzyjęty—
PSR-14Event Dispatcherprzyjęty—
PSR-15HTTP Handlersprzyjęty—
PSR-16Simple Cacheprzyjęty—
PSR-17HTTP Factoriesprzyjęty—
PSR-18HTTP Clientprzyjęty—
PSR-19PHPDoc tagsszkic—
PSR-20Clockprzyjęty—
PSR-21Internationalizationszkic—
PSR-22Application Tracingszkic—

PSR-9 i PSR-10 (zgłaszanie podatności) porzucono — dla bezpieczeństwa PHP-FIG nie ma dziś standardu. Styl żyje poza numeracją PSR: PER Coding Style „rozszerza, rozbudowuje i zastępuje PSR-12”, zachowując wymóg PSR-1.

TAB. 2PER Coding Style (PSR-12) kontra styl WordPressate same pliki nie spełnią obu naraz
PSR-12 / PER CSWordPress Coding Standards
Wcięcie4 spacje, taby zakazanetaby
Nawiasy wywołańfoo($a, $b)foo( $a, $b )
Klamra funkcjiw nowej liniiw tej samej linii
Klamra if/foreachw tej samej linii, treść w nowejw tej samej linii; zawsze klamry
PorównaniadowolnieYoda: if ( true === $x )
Tablice[]array() (WordPress-Core)
Nazwy funkcji i metodmetody camelCase (PSR-1)snake_case, z prefiksem wtyczki
Nazwy plików klasjak klasa, wg PSR-4class-nazwa-klasy.php
Długość liniimiękki limit 120 znakówbez twardego limitu
declare(strict_types=1)dopuszczone, opisany zapisrdzeń tego nie używa
TAB. 3PSR-4: autoloadingphp-fig.org/psr/psr-4
Pełna nazwa klasy\Dostawca\Podprzestrzen\Klasa — obowiązkowa przestrzeń najwyższego poziomu (dostawcy) i nazwa klasy; wielkość liter ma znaczenie.
MapowaniePrefiks przestrzeni nazw odpowiada katalogowi bazowemu; kolejne człony = podkatalogi; nazwa klasy + .php = plik.
LoaderNie rzuca wyjątków, nie zgłasza błędów, nie powinien nic zwracać — brak klasy to sprawa następnego loadera.
W praktycecomposer.json → autoload.psr-4 i vendor/autoload.php. Nikt nie pisze require dla każdej klasy.
Pułapka WordPressaDwie wtyczki dołączające tę samą bibliotekę w różnych wersjach: wygrywa ta, która załaduje się pierwsza. Stąd prefiksowanie zależności (PHP-Scoper, Strauss) — PSR-4 tego nie rozwiązuje.
TAB. 4Pomiar: dwie bazy kodu CreatoPHPCS 3.13.6 · WPCS 3.4.1 · 26.09.2026
BazaBudowaPlikiLiniePSR-12WordPressBezp. WPCS
Wtyczka Creato Ping1 plik, 70 funkcji z prefiksem creato_ping_, 0 klas, bez Composera1155843643060
Motyw Creato (creato2)PSR-4 (App, Core, Blocks), PHP 8.5, php-cs-fixer @PSR12, PHPStan poziom 815611 30113819 58362
Creato Ping — PSR-12436: klamra i treść w jednej linii ({ return; }) 122 + 122, 99 linii ponad 120 znaków, 70 klamer funkcji w tej samej linii; 336 do automatycznej poprawki.
Creato Ping — PSR-11 naruszenie: plik deklaruje funkcje i jednocześnie rejestruje hooki. W jednoplikowej wtyczce WordPressa nie da się inaczej.
Creato Ping — WordPress4 306 w 44 regułach; najwięcej: wcięcia spacjami 1 008, spacje w nawiasach wywołań 650 + 650, Yoda 64. Styl poza bramką; bramka Security + DB = 0/0.
Motyw — PSR-123 błędy (2 odstępy, 1 nazwa metody nie camelCase) i 135 ostrzeżeń o długości linii.
Motyw — WordPress19 583 — prawie wszystko to styl (16 189 do automatycznej poprawki): kod pisany pod PSR, nie pod WordPress.
Motyw — reguły bezpieczeństwa WPCS62 zgłoszenia w 16 plikach (nonce 29, unslash/sanityzacja 29, escapowanie 3, SQL 1). Sprawdzone próbkowo: w CacheHandler nonce i uprawnienie są w metodzie guard(), której WPCS nie widzi — fałszywy alarm. Reszta do przejrzenia.
TAB. 5Standard w LAB247wtyczka · motyw · Agenci AI
CoStanJak
Bezkonfliktowość wtyczkidziała70 z 70 funkcji, wszystkie opcje i hooki z prefiksem creato_ping_; jeden plik, zero zależności, zero klas. To chroni przed konfliktem — nie styl.
Styl wtyczkido decyzjiKod jest bliżej PSR-12 (436 naruszeń) niż stylu WordPressa (4 306), ale żadnego nie trzyma. Dwie drogi: PER CS (336 poprawek automatem, reszta ręcznie) albo WordPress (4 093 automatem) — wybór wpływa tylko na czytelność, bramka bezpieczeństwa zostaje ta sama.
PSR-4 we wtyczcenie robimyJeden plik bez klas — autoloader niczego by nie dał, a Composer w wtyczce oznaczałby dołączone biblioteki i ryzyko kolizji wersji u klienta.
Bramka WPCS na kodzie w stylu PSRdługW motywie Creato (klasy, metoda guard()) reguły nonce dają fałszywe alarmy. WPCS ma na to ustawienia (customNonceVerificationFunctions, customSanitizingFunctions) — po ich dopisaniu bramka Security byłaby dla motywu użyteczna. Dziś motyw ma tylko php-cs-fixer i PHPStan, bez reguł bezpieczeństwa WordPressa.
Agenci AI a styldługDEV z CREATO_TEAM zmienia kod motywów klientów w różnych stylach. Zasada „pisz stylem pliku, który edytujesz” nie jest spisana; linter stylu po zmianie — nie istnieje (patrz WP Secure Coding, TAB. 12).
TAB. 6Graniceczego styl nie załatwia
Styl ≠ jakośćMotyw z 3 błędami PSR-12 ma 62 zgłoszenia reguł bezpieczeństwa do przejrzenia; wtyczka z 436 naruszeniami PSR-12 przechodzi bramkę bezpieczeństwa czysto.
Styl ≠ bezkonfliktowośćKonflikty w WordPressie to wspólne nazwy funkcji, opcji, hooków i biblioteki w dwóch wersjach. Chronią prefiksy i przestrzenie nazw.
Dwa style, jeden ekosystemWtyczka zgłaszana do katalogu wordpress.org jest sprawdzana Plugin Check (WPCS) — tam styl WordPressa jest oczekiwany. Kod firmowy w PSR to świadomy wybór, nie błąd.
PSR-12 to już historiaPHP-FIG zastąpiło go PER Coding Style. Narzędzia (php-cs-fixer, PHPCS) mają oba zestawy — warto wskazać, który obowiązuje.
TAB. 7Jak czytać liczby i skąd się wzięłypomiar 26.09.2026 · php-fig.org
Pomiar
PHPCS 3.13.6 z WPCS 3.4.1 (xampp PHP 8.2), 26.09.2026, tylko pliki .php. Standardy PSR1, PSR12 i WordPress jak w narzędziu; „bezpieczeństwo” = reguły EscapeOutput, ValidatedSanitizedInput, NonceVerification, PreparedSQL.
Na 1000 linii
Liczba naruszeń podzielona przez liczbę linii plików PHP (z komentarzami) × 1000 — żeby porównać bazy różnej wielkości.
Motyw
Katalogi src, _core/src, blocks, _core/blocks repozytorium CREATO_CCC/creato2 — kod PHP motywu bez vendor i szablonów Twig.
Lista PSR
Tabela php-fig.org/psr odczytana 26.09.2026: 23 pozycje, 14 przyjętych, 2 wycofane, 3 porzucone, 4 szkice.
Blog 24/7
26.09Fałszywe SMS-y o opłacie parkingowej wyłudzają dane karty, ostrzega CERT Polskadobreprogramy.pl26.09Grupa UNC6240 omija filtry WAF i masowo atakuje krytyczną lukę bez poprawkithehackernews.com26.09Kiteworks zaleca klientom wyłączenie serwerów na sześć godzin w sobotę 26 wrześniableepingcomputer.com25.09Elementor 4.3.0 i 4.3.1: jeden link zakłada napastnikowi konto administratorapatchstack.com25.09Atak na system Medyc: sprawcy twierdzą, że mają dane 5 mln pacjentów i 8 mln zdjęćzaufanatrzeciastrona.pl25.09Fałszywe aplikacje płacowe instalują ScreenConnect na komputerach działu płachelpnetsecurity.com24.09Zdrowit S.A. potwierdza cyberatak, przestępcy opublikowali plik 90 GBtelepolis.pl24.09Fałszywa „aktualizacja PDF” z Facebooka prowadziła do aplikacji Messenger Pro w Googleinstalki.pl24.09Fałszywa weryfikacja Cloudflare na przejętych stronach firm instaluje stealer Psychedelicthehackernews.com24.09Luka prompt injection w aplikacji agentowej AI pozwalała wykonać kod przez mailadarkreading.com