PHP Topluluğu inanılmaz büyük ve sayısız framework ve kütüphaneye sahip. Herkes kendi projelerine bu kütüphaneleri dahil etmek ister. Kodlama stilleri ile amaçlanan bu kütüphaneleri sıkıntısız bir şekilde projelerimize dahil etmek (elinden geldiğince). Framework Interop Group bazı kodlama stilleri önermişlerdir. Bunlar: PSR-0, PSR-1 ve PSR-2 Bu standartlar farklı geliştiriciler tarafından sizin kodlarınızı kolay bir şekilde düzenlemesine olanak sağlamaktır. Bu yazımda ise PSR-0’dan bahsedeceğim.
PSR-0
Zorunluluklar
- Tüm namespace ve classlar şu formatta olmalıdır:
\Sağlayıcı İsmi\(Namespace\)Class Adı
- Tüm namespacelerin üstünde bir Sağlayıcı İsmi olmak zorundadır.
- Her bir namespace’in altında istediği kadar namespace olabilir.
- Her bir namespace yüklenirken namespace ayracı (), klasör ayracına dönüştürülür.
- Class ismindeki her bir alt çizgi (_), klasör ayracına dönüştürülür.
- Her bir namespace ve class dosyası .php uzantısına sahip olmalıdır.
- sağlayıcı adı, namespace ve class isimlerinde büyük, küçük harfin önemi yoktur.
Örnekler
\Doctrine\Common\IsolatedClassLoader
=> /proje/yolu/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
Sağlayıcı Adı: Doctrine
Namespace: Common
Class: IsolatedClassLoader
\CanGelis\Controller\Post
=> /proje/yolu/lib/vendor/CanGelis/Controller/Post.php
Sağlayıcı Adı: CanGelis
Namespace: Controller
Class: Post
Alt çizgili örnekler
\CanGelis\Controller\User_Post
=> /proje/yolu/lib/vendor/CanGelis/Controller/User/Post.php
Örnek Kodlama:
include
edilecek class adını vererek, include edilecek dosyayı bulan bir fonksiyon;
function yuklenecekDosya($classAdi)
{
$classAdi = ltrim($classAdi, '\\');
$fileName = '';
$namespace = '';
if ($lastNsPos = strrpos($classAdi, '\\')) {
$namespace = substr($classAdi, 0, $lastNsPos);
$classAdi = substr($classAdi, $lastNsPos + 1);
$dosyaAdi = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$dosyaAdi .= str_replace('_', DIRECTORY_SEPARATOR, $classAdi) . '.php';
require $dosyaAdi;
}
PSR-0 composer gibi paket yöneticilerinde kullanılıyor. Ayrıca şurada PSR-0 uyumlu classların otomatik yüklenmesini yaptık 🙂 Daha detaylı bilgi için: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md