İçeriğe geç

PHP Standart Tavsiyeleri (PSR) Nelerdir ve Açıklamaları

PHP herhangi bir yazım standardına sahip değildir. Proje ve kütüphanalerde farklı yazım tiplerine rastlayabilirsiniz. Bunun sonucu olarak proje kodlarını analiz etmeniz zorlaşır. Bu sorunu çözmek için evrensel PHP geliştiricilerinin belirledikleri PSR standartları bulunmaktadır. Bu standartlar büyük projelerde, frameworklerde yer almaktadır. Sizler de projelerinizde bu standartları uygulayabilirsiniz. Bu makalemizde önemli bazı standartlara değineceğiz.

 

PHP PSR-1

PSR-1 standardı PHP dosyalarında uyulması gereken temel kodlama standartlarını belirtir.

  • PHP dosyalarınızda <?php ve <?= kullanmanız gerekir.
  • PHP dosyaları SADECE UTF-8 without BOM ( UTF-8 BOMSUZ ) olmalıdır.
  • Bir PHP dosyası SADECE sınıf, fonksiyon veya sabit tanımlamalı ya da sonuç üretmeli veya ini değişikliği yapmalıdır.
  • Bir PHP dosyasında hem fonksiyon tanımı hem de çıktı üreten kodların olmaması gerekir.
<?php
// Hatalı kullanıma örnek
// çıktı üretir.
echo "<html>\n";

// fonksiyon tanımı
function foo()
{
    // function body
}

?>
  • Sınıf isimleri StudlyCaps olmalıdır.
<?php
//PHP 5.3 ve sonrası için sınıf tanımlama örneği
namespace Vendor\Model;

class Foo
{
}

//PHP 5.2 ve öncesi için sınıf tanımlama örneği
<?php

class Vendor_Model_Foo
{
}

?>
  • Sınıf sabitleri tamamı büyük harf olmalı, ayraç olarak sadece alt çizgi kullanılmalıdır.
<?php

namespace Vendor\Model;

class Foo
{
    const VERSION = '1.0';
    const DATE_APPROVED = '2012-06-01';
}

?>
  • Metot isimleri camelCase olmalıdır.
<?php

namespace Sezer\Model;

class OrnekNesne {

  const ADI_SOYADI = "Hooop Sungerbob";
  
  public function merhabaDunya() {
    return "Merhaba Dünya";
  }
  
  public function adiSoyadiNe() {
    return self::ADI_SOYADI;
  }

}

?>

Bu standart özellik isimlendirme ( $StudlyCaps, $camelCase, $under_score ) kurallarını belirtmez.

Ancak bir proje içinde özellik isimlendirmesi tutarlı olmalıdır.

Yani bir sınıf içinde hem $StudlyCaps hem de $under_score kullanılması tavsiye edilmemektedir.

PHP PSR-2

PSR-2 standardı PSR-1’in devamı niteliğindedir ve PHP komutlarında uyulması gereken kodlama standartlarını belirtir.

  • PSR-1 standardına uyulması gerekir.
  • PHP komutlarında girinti tab yerine 4 boşluk olmalıdır.
  • Satır uzunluğu sınırı zorunlu olmamakla birlikte 80 karakter önerilmekte, en fazla ise 120 karakter olması tavsiye edilmektedir.
  • Namespace ve use kullanımından sonra bir satır boşluk bırakılmalıdır.
  • Sınıflara ait açılış ve kapanış süslü parantezleri bir alt satırda olmalıdır.
<?php

namespace Vendor\Package;

class OrnekNesne 
{
}

?>
  • Metotlara ait açılış ve kapanış süslü parantezleri bir alt satırda olmalıdır.
<?php

namespace Vendor\Package;

class OrnekNesne 
{
    public function merhabaDunya()
    {
    }
}

?>
  • Tüm metotlarda erişim belirleyicilerin olması zorunludur. abstract ve final erişim belirleyicilerden önce static ise erişim belirleyicilerden sonra olmalıdır.
<?php

namespace Vendor\Package;

abstract class OrnekNesne
{

    abstract public function notHesapla();

    final public function merhabaDünya()
    {
        return "Merhaba dünya";
    }

    public static function adiSoyadi()
    {
        return "Yusuf Sefa SEZER";
    }

}

?>
  • Kontrol yapısı anahtar kelimelerinden (if, switch, for, while vb.) sonra bir boşluk, süslü parantezden önce bir boşluk olmalıdır. Metotlarda boşluk olmamalıdır.
<?php

if ($expr1) {
    // if body
} elseif ($expr2) {
    // elseif body
} else {
    // else body;
}

// merhabaDunya (); // tavsiye edilmez
// merhabaDunya( ); // tavsiye edilmez
merhabaDunya();

?>
  • Kontrol yapılarında açılış süslü parantezi aynı satırda kapanış süslü parantezi bir alt satırda olmalıdır.
<?php

try {
    // try body
} catch (FirstExceptionType $e) {
    // catch body
} catch (OtherExceptionType $e) {
    // catch body
}

?>
  • Kontrol yapılarındaki açılış parantezlerinden sonra, kapanış süslü parantezlerinden önce boşluk olmalıdır.
  • PHP anahtar kelimeleri küçük harfle yazılmalıdır. ( TRUE yerine true, False yerine false, Public yerine public gibi )
  • Metottaki parametreye ait virgülden sonra bir boşluk bırakılmalıdır. Virgülden önce bırakılmamalıdır. Varsayılan değere sahip parametreler en sona yazılmalıdır.

Standarda ait bir örnek PHP dosyası;

<?php
namespace Vendor\Package;

use FooInterface;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface
{
    public function sampleMethod($a, $b = null)
    {
        if ($a === $b) {
            bar();
        } elseif ($a > $b) {
            $foo->bar($arg1);
        } else {
            BazClass::bar($arg2, $arg3);
        }
    }

    final public static function bar()
    {
        // method body
    }
}

PHP PSR-3

  • PSR-3 standardı IETF RFC 5424, tarafından belirlenmiş sekiz seviye ( debug, info, notice, warning, error, critical, alert, emergency ) kayıt türünü tanımlar.
  • Metotlar temel olarak mesaj ve içerik parametrelerini alır.

Laravel, Symfony gibi framework yapılarında Loglama işlemi PSR-3 standardını uygulayan Monolog yapısını kullanır.

PHP PSR-4

PSR-4 standardı PSR-0 standardına yeni özelliklerin eklenmesi ve bazı uygulamaların kaldırılmasıyla oluşturulmuş otomatik yükleme yapısını belirtir.

  • Her sınıf bir üst namespace (<Sağlayıcı>) sahip olmalıdır.
  • Her namespace alt namespace’lere sahip olabilir.

\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>

  • Sınıf adlarındaki alt çizginin (PSR-0’dan farklı olarak) bir anlamı yoktur.
  • Sınıflar büyük veya küçük harf ile adlandırılabilir.

PSR-4 standardının PSR-0’a göre en büyük farkı her sınıfın bir üst <Sağlayıcı> olarak bilinen ekin kullanılma zorunluluğun olmamasıdır.

Böylece klasör karmaşasının önüne geçilmiştir.

PSR-0’a ait klasör yapısı

vendor/
    vendor_name/
        package_name/
            src/
                Vendor_Name/
                    Package_Name/
                        ClassName.php       # Vendor_Name\Package_Name\ClassName
            tests/
                Vendor_Name/
                    Package_Name/
                        ClassNameTest.php   # Vendor_Name\Package_Name\ClassNameTest

PSR-4’e ait klasör yapısı

vendor/
    vendor_name/
        package_name/
            src/
                ClassName.php       # Vendor_Name\Package_Name\ClassName
            tests/
                ClassNameTest.php   # Vendor_Name\Package_Name\ClassNameTest

Kabul Edilmiş Diğer Standartlar

  • PSR-6: Caching Interface: Genel Çerez Kaydetme Standartları
  • HTTP Message Interface: HTTP istekleri için standartları belirtir.
  • PSR-11: Container interface: Frameworklerde yer alan Container yapısının standartlarını belirtir.

Diğer önemli, kabul edilen, artık kullanılmayan tüm standartlara buradan ulaşabilirsiniz.

Kategori:Php

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.