Logo
Blog
PHP

PHP Kodlama Standartları (PSR Standartları)

Mehrba arkadaşlar,

PHP'de kod yazarken aslında belli bir düzen yoktur. Bizlerde düzene göre yazmayız. Ama proje büyüdüğünde ve başka kişilerin incelemesi gerektiğinde, kodun belli düzen içerisinde olması gerekirki anlaşılabilsin.

Bunun için dünyaca ünlü yazılımcıların bir araya gelerek belirlediği kodlama standartları var. Bunlara PSR Standartları adı verilmiştir. Şuanda 4 tane PSR Standart'ı var. PSR-0, PSR-1, PSR-2 ve PSR-3.

Şimdi tek tek bunları ele alalım ve örneklendirelim.

PSR-0 Standartı

  • Autoloading yapısı üzerine kurulu bir mimariye sahiptir.
  • Her sınıfın bir namespace’i olmalıdır.
  • Her namespace’in bir üst namespace’i olmalıdır. Yani;  \Proje_adi\namespace\class\
  • Her namespace’in alt namespace’leri olabilir.
  • Her namespace  “_” işareti, / (DIRECTORY_SEPARATOR) olarak algılanmalıdır.
  • Proje adında, sınıf isimlerinde büyük küçük harf kombinasyonları olabilir.

PSR-0 Örneği

  • \Doctrine\Common\IsolatedClassLoader =>/path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
  • \Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php
  • \Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php
  • \Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php

PSR-1 Standartı

  • PSR-1 standartları PSR-0 standartlarını aynen kabul eder ve bu standartta genel kod yazım stili üzerinde kurallar verir.
  • PHP dosyaları <?php başlamalı.
  • Dosyalar UTF-8 ve BOM’suz olmalıdır.
  • Sınıf isimleri StudlyCaps olmalıdır.
  • Sınıf sabitleri tamamı büyük harften oluşmalıdır.
  • Metot isimleri CamelCase olmalıdır.
  • Değişken isimlerinde StudlyCaps, camelCase veya hepsi küçük şekilde alt çizgi dahil kullanım olabilir. getOption, get_option

PSR-1 Örneği

<?php
// side effect: change ini settings
ini_set('error_reporting', E_ALL);
 
// PHP 5.3 and later:
namespace ProjeAdi\Model;
 
class Foo
{
}
 
// PHP 5.2.x and earlier:
class ProjeAdi_Model_Foo
{
}
 
class Foo
{
    const VERSION = '1.0';
    const DATE_APPROVED = '2012-06-01';
}

PSR-2 Standartı 

  • PSR-1’i destekler.
  • Her satırda önerilen 80 karakter, max 120 karakter olmalıdır.
  • Satırlarda tab yerine 4 boşluk kullanılmalıdır. (whitespace).
  • Namespace, class ismi, methot isminden sonra 1 boşluk bırakılmalı.
  • Metot, sınıf oluşturulduğunda açılan süslü parantezler “{” ismin bitişinde değil bir alt satırda açılmalı.
  • Operatörler ile değişkenler arasında bir karakter boşluk bırakılmalı.
  • true,false,null küçük kullanılmalı.

PSR-2 Örneği

<?php
namespace Vendor\Package;

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

class Foo extends Bar implements FooInterface
{
    public function sampleFunction($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
    }
}

PSR-3 Standartı

  • Loglama üzerine kurulu standartlardır.
  • 8 level log tipi olmasını öneriyor. (debug, info, notice, warning, error, critical, alert, emergency)
  • Her metot string veya obje kabul edebilir.
  • Mesaj içerisindeki placeholder lar, verilen array içerisindekiler ile değiştirilir.
  • Mesaj içerisindeki placeholder lar {} arasında yazılır.
  • Placeholder lar A-Z, a-z, 0-9, _ karakterlerinden oluşabilir.

PSR-3 Örneği

<?php
 
/**
* Interpolates context values into the message placeholders.
*/
function interpolate($message, array $context = array())
{
  // build a replacement array with braces around the context keys
  $replace = array();
  foreach ($context as $key => $val) {
      $replace['{' . $key . '}'] = $val;
  }
 
  // interpolate replacement values into the message and return
  return strtr($message, $replace);
}
 
// a message with brace-delimited placeholder names
$message = "User {username} created";
 
// a context array of placeholder names => replacement values
$context = array('username' => 'bolivar');
 
// echoes "User bolivar created"
echo interpolate($message, $context);

Arkadaşlar kodlarımızı yazarken bu standartları göz önünde bulundurursak hem daha anlaşılır olur hemde daha kabul edilebilir olur. 

Hepinize iyi kodlamalar smiley

Konu anlatımında ve örnek kodlarda enesgur.com.tr sitesinden yararlanılmıştır. 

Author

Muhammed Yusuf TAŞKESENLİGİL

Hakkında: Hakkında: 2015 Haziran ayında KTÜ Bilgisayar Mühendisliği bölümünden mezun oldum. Yaklaşık 4 yıldır web teknolojileri üzerinde çalışıyorum. HTML, CSS, JavaScript ve PHP alanlarında proje geliştiriyorum. Teknolojiyi seven ve hayatının her alanında kullanan biriyim.

PHP ile Timer Yapalım Önceki Yazı
Phpmailer Sınıfı | SMTP Protokolü ile Site Üzerinden Mail Gönderme Sonraki Yazı

0 Yorum

    Henüz hiç yorum eklenmemiş!

Bir Yorumda Sen Bırak