İşimizi Kolaylaştıran 10 PHP Kodlama Yöntemi

Birçok kod yazıyoruz ve bunları ortaya koyarken herkes farklı yöntemler kullanılıyor. Bu yazıda bazı PHP ipuçlarından bahsedeceğim. Tüm bunlar hem kod kalitemizi arttıracak, hem de bize zaman kazandıracak şeyler olacak.

1. Üçlü (Ternary) Operatör

Üçlü operatör, if/else işlemlerimizi kolaylaştırmamızı sağlayan soru işareti (?) ve iki nokta üst üste (:) işaretiyle oluşturduğumuz bir yöntemdir. Bu yöntem işimizi hem kolaylaştırır hem de hızlı bir hale getirir. Örneğini görelim:

$sayfa = isset($_GET['sayfa']) ? $_GET['sayfa'] : 1;
// veya
echo isset($degisken) ? $degisken : 'Değişken yok!';

2. Hata Yönetimi & İstisna Yakalama

Programlama ile uğraşıyorsak hatalar bu işin olmazsa olmazlarından. Hatasız kul olmadığı gibi, geliştirme sürecinde de uygulama olmuyor. Tüm programlama dillerinde olduğu gibi PHP’de de hata yönetimi oldukça önemli.

try {
  // herhangi bir şey
} catch (\Exception $e) {
  echo 'Hata var: ' . $e->getMessage();
}

3. list() Fonksiyonu

Dizi öğelerini değişkenlere atamak için list() fonksiyonu iyi bir araçtır.

$kisi = ['Yılmaz Demir', 'foo@bar.com'];
list($isim, $eposta) = $kisi;

şuna denk düşer:

$isim = $kisi[0];
$eposta = $kisi[1];

4. compact() Fonksiyonu

Ben MVC ile yazdığım uygulamalarımda görünüm dosyasına parametre gönderirken genelde compact() fonksiyonu kullanıyorum. Bu çok daha kolay oluyor ve kod yapısını iyileştiriyor. Örneğin:

$baslik = 'Ana Sayfa';
$gonderiler = $gonderi->hepsi();

$this->render('gonderiler.php', compact('baslik', 'gonderiler'));

compact('baslik', 'gonderiler') şuna denk düşer:

array('baslik' => $baslik, 'gonderiler' => $gonderiler);

5. Tek Satırda if

Metodlarda/fonksiyonlarda eğer olağandan farklı bir durum olursa, süslü parantez kullanmadan if yapısını şu şekilde kullanıyorum:

if (!is_numeric($_GET['id']) return false;

6. Bulunduğunuz Dizini İşaretleyin

Programa herhangi bir dosya dahil ederken (require, include) veya bir dosya çağırırken dosya yoluna bulunulan dizini eklemek oldukça yararlı bir kullanım.

define('CONFIG_DIR', __DIR__.'/config');
// veya
require __DIR__.'/config.php';

7. İsimleri Kısaltarak Anlamsızlaştırmayın

Bizler makine değiliz. Kodlama esnasında ‘zamandan kazanırım’ diyerek değişken, fonksiyon, metod, sınıf vs. isimlerini anlamsızlaştırmak veya kısaltmak hem bize, hem de daha sonra kodu okumak isteyen insanlara epey sıkıntı çıkaracaktır. Örneğin:

$syf = 5; // $sayfa = 5;
$pg = 5; // $pagination = 5;

8. Çift Tırnak ve Tek Tırnak Farkı

PHP’de çift tırnak ve tek tırnak farklı amaçlar için kullanılır. Bazı programlama dillerinde bu fark gözetildiği gibi PHP’de de gözetilir. Çift tırnak işareti arasında değişkenleri yazdırabiliyorken, tek tırnak işareti arasında yazdıramayız. Aynı zamanda tek tırnak işaretleri arasında ASCII kontrol karakterleri kullanılamıyor. Örneklendirelim:

$isim = 'Yılmaz';
echo "Merhaba $isim"; // doğru

// şu kullanım geçersizdir:
echo 'Merhaba $isim\n'; // veya echo 'merhaba\nisim';

// daha güvenli değişken kullanımı içinse:
echo "Merhaba sevgili {$isim}!";

9. strlen() alternatifi

Birazdan göstereceğim kullanım strlen() fonksiyonu için ufak bir alternatif olabilir. Ama türkçe karakterler için kullandığımız mb_strlen() için bir alternatif olamıyor. Şöyle ki:

$kullaniciAdi = 'demir';
echo isset($kullaniciAdi[15]) ? 'Kullanıcı adı 15 karakterden fazla olamaz' : null;
echo !isset($kullaniciAdi[2]) ? 'Kullanıcı adı 3 karakterden az olamaz' : null;

10. Fonksiyonları Tanımlarken Hatayı Önlemek

Genelde, düzenli kod yazımında ve ortak çalışma yapıldığında bu yöntem çokça kullanılır. Birçok geliştirici bunu alışkanlık haline getirmiştir, size de önerim bu şekilde kullanmanızdır. Fonksiyon tanımlamadan önce, o fonksiyonun tanımlanıp tanımlanmadığını kontrol etmek.

if (!function_exists('permalink')) {
  function permalink($string)
  {
     # kodlar...
  }
}

Umarım hepsi iş görür, iyi kodlamalar.

PHP’de Compact Fonksiyonu

Laravel ile geliştirilmiş bir uygulamada rastladım bu fonksiyona. Şablon dosyası yorumlarken kullanılmış. Normal şartlarde şablon dosyası yorumlarken şunu kullanıyordum:

$post = Post::get($id);
$user = User::get();

render('home.template', [
	'post' => $post,
	'user' => $user,
	'message' => 'Gönderi görüntülendi!'
]);

ama şu kullanım da yukarıdaki kadar kullanışlı ve düzenli olabilir:

$post = Post::get($id);
$user = User::get();
$message = 'Gönderi görüntülendi!';

render('home.template', compact('post', 'user', 'message'));

Eğer değişkenlerle değerlerinden oluşan bir dizi oluşturmak istiyorsak bu fonksiyonu kullanabiliriz. Farklı alanlarda da farklı şekillerde kullanılabilir. Detaylar için:

http://php.net/manual/tr/function.compact.php

PHP’de explode Fonksiyonu

PHP’de en çok karşıma çıkan fonksiyonlardan birisi olan explode() fonksiyonu hakkında bir kaç kelam etmek gerekiyor. Bu fonksiyonun kullanım amacı, belirli bir karakteri kullanarak bu karakteri içeren dizgeyi parçalara ayırıp dizge haline getirmek.

(PHP 4, PHP 5, PHP 7)
explode — Bir dizgeyi bir ayraca göre bölüp bir dizi haline getirir

Kullanımı

explode(dizge $ayraç, dizge $dizge)

Örneklemelerle kullanımını anlayalım. Örneğin bir formdan etiketler alanı gelmiş olsun. Bu etiketleri virgül yardımıyla parçalara ayırıp dize haline getirelim.

// Örnek POST alan içeriği: php dersleri, fonksiyonlar, nasıl yapılır, içerik
$etiketler = $_POST['etiketler'];

// , karakteriyle dizgeyi bölüyoruz
$etiketlerDizesi = explode(',', $etiketler);
// Her dizge öğesine trim() fonksiyonu uyguluyoruz
// bu fonksiyon, sağdaki ve soldaki boşlukları temizler
$etiketlerDizesi = array_map('trim', $etiketlerDizesi);

// Dizge içeriğini ekrana yazdıralım:
print_r($etiketlerDizesi);

/* 
Sonuç olarak dönen değer şu olacaktır:
Array
(
    [0] => php dersleri
    [1] =>  fonksiyonlar
    [2] =>  nasıl yapılır
    [3] =>  içerik
)
*/

explode Fonksiyonunun Kullanım Alanları

Nerelerde kullanıyoruz bu fonksiyonu hemen söyleyelim. Örneğin, URL barındaki adresi anlamak için kullanıyoruz ya da belli karakterlerle listelenmiş bir yazıyı parçalara bölmek için kullanıyoruz. Ben, örnek olarak basit bir yöntemi anlatacağım. Bu anlatacağım yöntemde URL satırındaki adresi alıp, daha anlaşılabilir hale getireceğiz.

Bahsedeceğim örnekte, modül ve bölüm sistemi olacak. Modüller, anasayfa, haber, galeri gibi kök yöneticiler, bölümler ise alt yöneticileri olacak. Yani örneğin haber modülü için haberGoster, haberEkle gibi ek bölümler olacak.


// Eğer rota varsa rotadır, yoksa kök halindedir
$rota = isset($_GET['rota']) ? $_GET['rota'] : '/';
// Burada explode ile / karakterini kullanara dizgeyi böldük
$rotalar = explode('/', $rota);
// Eğer dize içindeki ilk rota boşsa diziden çıkaralım
// array_shift fonksiyonu dizideki ilk öğeyi çıkarır
if (empty($rotalar[0])) array_shift($rotalar);

// Burada modül eğer varsa ve boş değilse modüldir, değilse geçerli olarak anasayfa'dır
$modul = isset($rotalar[0]) && !empty($rotalar[0]) ? $rotalar[0] : 'anasayfa';
// Burada aynı şekilde modül gibi varsa vardır yoksa giriş'dir
$bolum = isset($rotalar[1]) && !empty($rotalar[1]) ? $rotalar[1] : 'giris';

// Yukarıdaki işlemin diğer bir kullanımı şöyledir:
$modul = null;
if (isset($rotalar[0]) && !empty($rotalar[0])) {
	$modul = $rotalar[0];
} else {
	$modul = 'anasayfa';
}

Yukarıdaki örneği olabildiğince basite indirgediğim için işimizi tam anlamıyla ve sürekli olarak görmeyebilir ama anlamak açısından iyi gelebilir. MVC çatıları sayfanın ne olduğunu explode fonksiyonu ile anlar ve işlemi buna göre yönlendirirler.

PHP’de array_sum Fonksiyonunu Alt Dizelerde Kullanmak

PHP’de array_sum fonksiyonu kullanmam gerekti. Ama normal kök dizide değilde, alt dizideki değerleri toplamam gerekiyordu.

array_sum fonksiyonu ne işe yarar?
Bu fonksiyon bir dize içerisindeki değerlerin toplamını döndürür.

Örnek senaryo, her müşteriye ait tutar/bakiye değerlerini listeleyip hepsinin toplamını en son göstermek.

['Müşteri' => ['Tutar' => 150.00, 'Bakiye' => 360.00]]

<?php
$amount = [];
$balance = [];

foreach ($result as $result) {
    $amount[] = $result['amount'];
    $balance[] = $result['balance'];
    # Listeleme yapacak kod bloğu
}

$totalAmount = array_sum($amount);
$totalBalance = array_sum($balance);

Şeklinde kullanılabilir, kolay gelsin.

PHP ile SEF (Arama Motoru Dostu) URL Fonksiyonu

Daha önceden jQuery ile SEF Bağlantı Yapımı başlıklı bir yazı paylaşmıştım. Şimdi aynı ihtiyaç PHP ile doğdu. Search Engine Friendly URL yani Arama Motoru Dostu URL’ye aslında birçok internet sitesine girdiğimizde adres çubuğunda rastlıyoruz. Şöyle ki: orneksite.com/arama-motoru-dostu-baglanti şeklinde görünüyor. Fonksiyona aşağıdan ulaşabilirsiniz.

function SefBaglanti ($gelen) 
{
	$bul = array('Ç', 'Ş', 'Ğ', 'Ü', 'İ', 'Ö', 'ç', 'ş', 'ğ', 'ü', 'ö', 'ı');
	$degistir = array('c', 's', 'g', 'u', 'i', 'o', 'c', 's', 'g', 'u', 'o', 'i');
	$giden = strtolower(str_replace($bul, $degistir, $gelen));
	$giden = preg_replace("@[^A-Za-z0-9\-_\.\+]@i", ' ', $giden);
	$giden = trim(preg_replace('/\s+/', ' ', $giden));
	$giden = str_replace(' ', '-', $giden);
	return $giden;
}

Gelen veri ve giden veri diye isimlendirdim. Bul değişkenindeki verileri Değiştir değişkenindeki verilerle değiştirmesi için str_replace fonksiyonunu kullanıyoruz. Regex ile süzüyoruz, yandaki boşlukları varsa siliyoruz ve boşluğı tireye çevirip fonksiyonun veriyi döndürmesini sağlıyoruz. Kullanımını ise şu şekilde yapabiliriz:

echo SefBaglanti("Bu Bir Gönderi Başlığıdır");
// Çıktısı: bu-bir-gonderi-basligidir

Kolay gelsin.