PHP Standart Önerisine (PSR) Giriş

Yayınlanan: 2019-12-24

Bir zamanlar bir konferansta, çeşitli çerçevelerden lider geliştiriciler aynı odada oturdular ve tüm projelerinin kullanması için bazı standartlar üzerinde anlaştılar. Amaç, PHP çerçevelerini ve kitaplıklarını kullanıcılar için birleştirmeyi kolaylaştırmaktı. İşte o zaman php-fig: PHP Framework Interop Group doğdu. Bu harika kişilerden oluşan grup, PHP Standartları Önerilerini (PSR'ler) denetler.


PHP Standart Önerisi (PSR), PHP Framework Birlikte Çalışabilirlik Grubu (PHP-FIG) tarafından yayınlanan bir PHP özelliğidir. PHP'deki programlama kavramlarının standardizasyonuna hizmet eder. Amaç, bileşenlerin birlikte çalışabilirliğini sağlamaktır. PHP-FIG, birkaç PHP çerçeve kurucusu tarafından oluşturulmuştur.

PSR-0 ve PSR-4

Bunlar, dosya yollarından otomatik yükleme sınıfları için bir belirtimi açıklar. PSR-0 ve PSR-4, ad alanları, sınıf adları ve dosya yollarıyla ilgili standartlardır. Bu PSR ayrıca, spesifikasyona göre otomatik olarak yüklenecek dosyaların nereye yerleştirileceğini de açıklar.

Otomatik yükleme

Otomatik yükleme, PHP sınıflarını dahil eden geliştiricilerin her yerde karmaşık include/require deyimleri yazmadan otomatik olarak yardımcı olan bir işlevdir.
PHP'de, sınıfın tanımı, aşağıda gösterildiği gibi kullanılmadan önce, çağrıldıkları dosyalarda gerekli veya içerme ifadeleriyle yüklenir.

psr resim 1

Yukarıdaki yaklaşım, sanki bir dosyada kullanılacak onlarca harici sınıfımız varmış ve bir kaynak dosyanın hemen başında gerekli/include deyimlerini yazmaya başlıyormuşuz gibi bazı sorunları gündeme getiriyor.

Bu sorunun üstesinden gelmek için PHP 5, kodunuz henüz yüklenmemiş bir sınıfa veya arayüze atıfta bulunduğunda otomatik olarak çağrılan sihirli __autoload() işlevini tanıttı.

psr resim 2

İşte temel bir __autoload() uygulaması örneği:

psr_image3

__autoload() işlevinin en büyük dezavantajı, onunla yalnızca bir otomatik yükleyici sağlayabilmenizdir. PHP 5.1.2, __autoload 'ın sınırlamasıyla başa çıkmak için başka bir otomatik yükleme işlevini (spl_autoload_register) tanıttı.

spl_autoload_register()'ın tanıtılması, programcılara bir otomatik yükleme zinciri, bir sınıf veya arabirim yüklemeyi denemek ve yüklemek için çağrılabilecek bir dizi işlev oluşturma yeteneği verdi.

Örneğin:

psr_image4psr_image5

Otomatik yükleme o kadar harika bir fikirdi ki her proje onu kullanmaya başladı. Tek tip standartlar olmadığı için kaçınılmaz olarak herkes kendi otomatik yükleyici sürümünü yarattı. Açıkça, PHP'nin otomatik yükleyici için umutsuzca bir standarda ihtiyacı vardı, PSR-0 böyle doğdu. En son kabul edilen otomatik yükleyici standardı PSR-4'tür.

PSR-0 (Otomatik Yükleme Standardı)

PSR-0'a Genel Bakış:

  • Tam nitelikli bir ad alanı ve sınıf aşağıdaki yapıya sahip olmalıdır
    \<Satıcı Adı>\(<Ad alanı>\)*<Sınıf Adı>
  • Her ad alanının bir üst düzey ad alanına ("Satıcı Adı") sahip olması gerekir.
  • Her ad alanı, istediği kadar alt ad alanına sahip olabilir.
  • Dosya sisteminden yüklenirken her ad alanı ayırıcısı bir DIRECTORY_SEPARATOR'a dönüştürülür.
  • CLASS NAME içindeki her _ karakter bir DIRECTORY_SEPARATOR'a dönüştürülür. _ karakterinin ad alanında özel bir anlamı yoktur.
  • Dosya sisteminden yüklenirken tam nitelikli ad alanı ve sınıfın sonuna .php eklenir.
  • Satıcı adlarındaki, ad alanlarındaki ve sınıf adlarındaki alfabetik karakterler, herhangi bir küçük harf ve büyük harf kombinasyonundan olabilir.

Örnekler:

\Doctrine\Common\IsolatedClassLoader =>
/path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php

\Symfony\Core\Talep =>
/path/to/project/lib/vendor/Symfony/Core/Request.php

PSR-4 (Otomatik Yükleme Standardı)

PSR-4'e Genel Bakış:

  • "Sınıf" terimi, sınıfları, arayüzleri, özellikleri ve diğer benzer yapıları ifade eder.
  • Tam nitelikli bir sınıf adı aşağıdaki forma sahiptir:
    \<Ad AlanıAdı>(\<AltAdAlanıAdları>)*\<SınıfAdı>
  • Tam nitelikli sınıf adı, "satıcı ad alanı" olarak da bilinen bir üst düzey ad alanı adına sahip olmalıdır ZORUNLU.
  • Tam nitelikli sınıf adı, bir veya daha fazla alt ad alanı adına sahip OLABİLİR.
  • Tam nitelikli sınıf adı, sonlandırıcı bir sınıf adına sahip OLMALIDIR.
  • Tam nitelikli sınıf adının herhangi bir bölümünde alt çizgilerin özel bir anlamı yoktur.
  • Tam nitelikli sınıf adındaki alfabetik karakterler, herhangi bir küçük harf ve büyük harf kombinasyonu olabilir.
  • Tüm sınıf adlarına büyük/küçük harf duyarlı bir şekilde başvurulmalıdır ZORUNLU.

Composer kullanılarak PSR-4 tabanlı Otomatik Yükleme örneği:

  • Besteci kullanarak PSR-4 tabanlı otomatik yükleme elde etmek için aşağıdaki dizin yapısını göz önünde bulundurun.
psr_image6
  • Composer init kullanarak bir composer.json dosyası oluşturun. Değilse, şimdi projenizin kökünde manuel olarak bir tane oluşturabilirsiniz.
psr_image7
  • Besteci.json dosyasını aşağıda gösterildiği gibi düzenleyerek PSR4 otomatik yüklemesini ayarlayın:
psr_image8
  • Burada CodeCourse, uygulamanızın satıcı adıdır, bu adı src dizininizin içindeki dosyaları adlandırırken kullanabilirsiniz, örneğin:
    psr_image9

    Veya

psr_image10

vb,

  • Ve src, uygulamanızın otomatik olarak yüklemek istediğiniz dizinidir.
  • Ardından, terminalinizi açın ve projenize otomatik yükleme dosyalarını yüklemek için aşağıdaki komutu yazın. Bu, satıcı dizinini ve içindeki autoload.php dosyasını oluşturacaktır.
psr_image11
  • İlk önce CodeCourse dizini içinde birkaç sınıf oluşturalım.

CodeCourse/Filters içinde AuthFilters.php oluşturun

psr_image11

CodeCourse/Repositories içinde UserRepository.php oluşturun

psr_image12
  • Son olarak, test etmek için bir index.php dosyası oluşturun ve autoload.php dosyasını bir kez index.php dosyanıza eklemeniz gerekir.
psr_image14

PSR-1 ve PSR-2

PSR-1 ve PSR-2, PHP kodlama standartları için kullanışlıdır. PSR-1 temel olarak PHP için temel kodlama standardına odaklanırken, PSR-2 daha çok PSR-1'in genişletilmiş bir versiyonu gibidir. PSR-1, adlandırma kuralları için bir dizi basit kural listeler ve PSR-2, daha kapsamlı bir kodlama stili kılavuzu sağlar.

PSR-1 (Temel Kodlama Standardı)

PSR-1'e Genel Bakış:

  • PHP etiketleri için yalnızca <?php veya <?= kullanımına izin verilir.
  • UpperCamelCase'de sınıf isimleri tanımlanmalıdır.
  • CamelCase'de sınıf değişkenleri tanımlanmalıdır.
  • Sınıf sabitleri UPPER_SNAKE_CASE içinde tanımlanmalıdır.
  • Yöntem adları camelCase'de tanımlanmalıdır.
  • Dosyalar ya semboller (sınıflar, fonksiyonlar, sabitler, vb.) beyan etmeli ya da yan etkilere neden olmalıdır (örn. çıktı oluşturma, .ini ayarlarını değiştirme, vb.) ama ikisini birden YAPMAMALIDIR. yani,
psr_image15

Yukarıdaki örnek bir yan etkiye neden olur, yani “file.php” adlı bir dosyanın yüklenmesi.

  • Dosyalar, BOM (Byte Order Mark) olmadan UTF-8'de olmalıdır.
  • Ad alanları ve sınıf adları, PSR-0 ve PSR-4'teki standartları takip etmelidir.

İşte özellikler, sınıflar ve yöntemler için temel adlandırma kurallarını gösteren bir örnek.

psr_image16

PSR-2 (Kodlama Stili Kılavuzu)

PSR-2'ye Genel Bakış:

  • PSR-1 kodlama standartlarına uymalısınız.
  • Girintiler için 4 boşluk kullanılmalıdır. Sekmelerin kullanılmasına izin verilmez.
  • Satır uzunluğu için bir sınırlama yoktur, ancak 120 karakterin altında ve en iyisi 80'in altında olmalıdır.
  • Ad alanı bildiriminden sonra bir boş satır ve kullanım bloğu bildiriminden sonra bir boş satır olmalıdır.
  • Sınıflar ve yöntemler için kaşlı ayraçlar bir sonraki satırda, kapanış kaşlı ayraçlar ise gövdeden sonraki satırda gelmelidir.
  • Yöntemler ve özellikler önce abstract/final, ardından public/protected ve son olarak static anahtar sözcüğü ile tanımlanmalıdır.
  • Koşullu ifadelerde kaşlı ayraçların önüne yeni satır koymamalısınız.
  • Koşullu ifadelerde ( ve )'den önce boşluk bırakmamalısınız.
  • Sınıfları tanımlamak için bir örnek:
  • Yeni satırda kaşlı ayraçları açmalı ve tek satırda extensions ve apps anahtar sözcüğü kullanılmalıdır.
psr_image17

Gerçekleştirilecek birden fazla arabirim varsa, arabirim adlarını aşağıda gösterildiği gibi yeni satıra yazabilirsiniz:

psr_image18

PHP'de yöntemlerin nasıl tanımlandığını gösteren örnek:
Metotlar tanımlanırken argümanlar aynı satıra yazılmalıdır. Ayrıca, argümanlarda virgüllerden önce boşluklar koymamalısınız ve onlardan sonra bir boşluk koymalısınız.

psr_image19

Çok sayıda argüman varsa, bunlar birbiri ardına yeni satırda yazılabilir:

psr_image20

Yöntemleri tanımlarken, genel/korumalı/özel ve özet/son'dan birine sahip olmanız gerekir. Görünürlük modları, kullanılıyorsa, abstract/final anahtar sözcüğünden sonra gelir. static son değiştiricidir.

psr_image21

Koşullu İfadeler

  • (
  • (
  • Daha önce boşluk bırakmamalısınız)
  • 'den sonra bir boşluk bırakmalısınız)
  • else if yerine elseif kullanın.

Elseif ve else arasındaki farkı gösteren örnek:
elseif'in yorumlanması:

psr_image22

else'in yorumlanması eğer:

psr_image23

Switch deyimleri için,

  • Kaşlı parantezler, switch ifadesinin yazıldığı satırda açılmalıdır.
  • Kasa gövdesi kasadan bir kez girintili olmalı ve kasa anahtardan bir kez girintili olmalıdır.
  • Mola gerekmediğinde ara vermeyin.
  • Mola yerine dönüşü de kullanabilirsiniz.

Örnek:

psr_image24