http://aydinsistem.com/php-psr-nedir/
PHP malesef hiç bir zaman gerçek anlamda bir kodlama standartlarına sahip olmadı. Belkide bir çoğumuz PHP’yi bu sebeple seçtik.
İstediğimiz gibi, kendimize en uygun gelen şekilde yazılım yapma özgürlüğünü bizlere sunuyor.
Bazı yazılımcılar PEAR, Zend Framework gibi iyi belgelenmiş standartları kullanırken bazı yazılımcılarda kendi frameworklarını, kendi standartlarını uygulamayı tercih ediyorlar..
Bu özgürlük ilk bakışta özellikle yazılıma yeni atılan kişilere ne kadar iyi gözüksede aslında ciddi anlamda büyük problemlere sebebiyet veriyor. .
Örneğin bazen başka bir yazılımcı tarafından yazılmış bir işi alıp üzerinde biraz değişiklik yapmak, sadece kendi projenize entegre etmek hatta ve hatta bazen kodu okumak, ne yapmaya çalıştığını anlayabilmek bile bir kabusa dönüşebiliyor.
2009 yılında PHP|tek konferansında farklı projeleri temsil eden PHP yazılımcıları farklı projelerde çalışma hakkında tartıştılar. .
Tahmin edebileceğiniz gibi ana, asıl konu belirli bir standartlara uymaktı..
Bir süre öncesine kadar kendilerini PHP Standards Group (PHP Standartları Grubu) olarak adlandırıyorlardı. .
Bu ismin amaçlarını olması gerektiği gibi yansıtmadığını düşündükleri için adlarını Framework Interoperability Group (FIG) olarak değiştirdiler. .
FIG üyeleri kendi aralarında bazı PHP standartları belirliyorlar..
Framework Interoperability Group ismindeki Framework kelimesi sizi aldatmasın.
FIG üyeleri içerisinde Symfony, Laravel, Lithium, CakePHP gibi
frameworkların yanında PyroCMS, phpDocumentor, Joomla, Drupal, phpBB hatta ve hatta Composer dahi bulunmakta.
Her PHP yazılımcısı, hatta ve hatta isteyen herkes FIG topluluğuna katılabiliyor. Topluluk üyeleri neyin Önerilen PHP Standartları listesine giip giremeyeceği konusunda herhangi
bir yaptırımı malesef yok. Bu liste FIG üye proje temsilcileri (her proje bir temsilciye sahip, sitelerinden proje ve temsilcilere ulaşabilirsiniz)
tarafından öneri ve oylama yoluyla seçilmektedir.
FIG’ın kısaca amacı belirli bir PHP kodlama standardı oluşturmak. PSR bir kodlama yapmak zorunda değilsiniz.
Hatta ve hatta FIG üyeleri bile bu kurallara uyarak kodlama yapmak zorunda değiller.
Makalemin başında da belirttiğim gibi Önerilen PHP Standartları (PSR) önerilen kelimesi sizi “isteğe bağlı, istersek kullanırız” gibi
düşüncelere itmesine izin vermeyin. PHP toplulukları tarafından yakından takip edilmeleri, bu tarz topluluklardan,
projelerden destek görmeleri yakında her PHP yazılımcısının bir echo kullanımı gibi bilmesi gereken temel başlıklardan biri olacak.
Eskiden sayfaya sınıf dosyalarımızı require ile ekleyebiliyorduk. PHP 5 ile birlikte gelen __autoload() ile bazı şeyler yavaş yavaş değişmeye başladı.
PHP 5.1.2 işleri bir adım daha ileri götürerek spl_autoload() fonksiyonunu tanıttı. Bu fonksiyon sayesinde ardı ardına, zincirleme halinde autoload
fonksiyonlarımızı spl_autoload_register().
Autoloading (otomatik yükleme) fonsiyonelliği ne kadar iyi olsada uygulamada nasıl yapılması gerektiği hakkında herhangi bir yaptırımı yok.
Örneğin projenizde resimlerinizle ilgili işlemleri yapacak (thumbnail oluşturma, kırpma v.s. v.s.) kullanmak istediğiniz resim kütüphanesi sınıf ve dosya yapılarına
farklı bir şekilde yaklaşırken Google servislerine bağlanmanız için gerekli olan Google kütüphanesi sınıf ve dosya yapılarına farklı olarak yaklaşabilir.
İşin kötü tarafı bu iki kütüphaneyide aynı proje içerisinde kullanmanız gerekiyor.
Bir PHP yazılımcısı olarak mutlaka bu sorunla kariyerinizin bir noktasında karşılaştınız ve büyük ihtimalle bu makeleyi yazdığım dönemde de halen karşılaşmaya devam ediyorsunuz.
Eğer benim gibiyseniz PSR’lı bir alternatif aramaya başlıyorsunuz ya da oturup kütüphanede düzenleme yapmaya başlıyorsunuz.
İşte PSR-0 tam olarak burada devreye giriyor. FIG bu konuda PSR-0 kurallarına uygun bir autoloader fonksiyonu örneği sunuyor;
function autoload($className)
{
$className = ltrim($className, '\\');
$fileName = '';
$namespace = '';
if ($lastNsPos = strrpos($className, '\\')) {
$namespace = substr($className, 0, $lastNsPos);
$className = substr($className, $lastNsPos + 1);
$fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
require $fileName;
}
FIG PSR-0’dan sonra yaklaşık 1 – 1.5 yıl kadar oldukça sessiz kaldı.
Ardından PSR-1 ve PSR-2 ile geri dönüş yaptı.
PSR-1 temel kodlama standartlarına odaklanmıştır.
Çok detaya kaçmadan, temel kurallar belirleyerek paylaşılan / birden fazla programcının üzerinde çalıştığı
PHP kodlarında yüksek seviyede paylaşım imkanı sunmaktadır.
Kısaca PSR-1 standartları şöyledir;
Sadece <'?php ve <'?= etiketlerini kullanın.
PHP kodları için sadece UTF-8 (BOM suz) kullanın.
Yan-etkileri ve tanımları ayırın.
PSR-0 uygulanmalı.
Sınıf isimleri StudlyCaps olarak tanımlanmalıdır.
Sınıf constantları tanımlamalarında tamamiyle büyük harfler kullanılmalı ve ayıraç olarak sadece _ kullanılmalıdır.
Method isimleri camelCase kullanılarak tanımlanmalıdır.
PSR-1 genel olarak isimlendirme ve dosya / klasör yapısına odaklanmıştır.
Böylece 3. parti kütüphane / kodları sisteminize ekleseniz dahi, üst seviyeden bakıldığında dosya,
klasör yapıları birbirleriyle aynı olacak, proje tam bir bütün olarak gözükecektir.
Aksi takdirde özellikle büyük projelerde, projenin arap saçına dönmemesi kaçınılmaz olur.
PSR-2 bir bakıma PSR-1’in uzaltılmış, genişletilmiş hali diyebiliriz. PSR-2’nin amaçı paylaşılan PHP kodlarında ortak bir formatlama, kodlama stili sağlamaktır..
Bu standartlar belirlenmeden önce FIG üyeleri (oylama yapabilen, FIG üyesi her projelere ait birer temsilci) .
tarafından uzun bir oylama ve anket sonucunda ortaya çıkarılmışlardır..
PSR-2’ye ait kurallar, FIG üyeleri tarafından kararlaştırılmış kurallardır ve her PHP yazılımcısının kodlama stili tercihi olmayabilir. .
FIG’in kuruluşunun başından beri bu kurallar FIG’e üyeleri kendi içlerinde oylama yaparak kendi projelerinde uygulayacakları standartları belirlemek için oluşturulmaktadır..
Bu standartların FIG dışına çıkıp genel olarak PHP toplulukları tarafından kabul edilip uygulanmaya başlanması FIG için sadece olumlu bir dönüşüm / sonuç olmuştur..
PSR-2 kodlama stili standartlarını fig-standards Github deposunda bulabilirsiniz. .
Kesinlikle okumanızı ve hatta yavaş yavaş bu kodlama stilini uygulamaya başlayarak alışmanızı öneririm..
Tabii bazı yazılımcıların isimlendirme (method, sınıf v.s.) ve boşluk yerine tab kullanma gibi kodlama tercihleri.
nedeniyle PSR-0 ve PSR-1’i uygularken özellikle PSR-2’nin bazı konularını göz ardı ettiklerini gözlemleyebilirsiniz..