Php milyonlarca geliştirici tarafından bir çok alanda kullanılan bir dil haline geldi. Kullanımı her geçen gün daha da yaygınlaşan bu dil hakkında bir çok makale ve blog paylaşıldı. Sitelerde ve bloglarda verilen örnek kodlar bir çok geliştirici için hayat kurtarıcı olsa da konuya hakim oldukça yapılan hataların performansı olumsuz etkilediğini siz de görmüşsünüzdür.
Burada gerek performansı arttırmak gerekse zamandan kazanmak için bazı ipuçları ve püf noktalarından bahsetmeye çalışacağım;
1: (if/else)
Aslında kod olarak kullanımı yanlış olmasa da return ifadesi kullanılan fonskiyonlarda çoğunlukla else yazımı gereksizdir. Yaygın kullanılan yönteme bir bakalım
function is_active(bool $user) {
if ($user->active) {
return "Active";
} else {
return "Passive";
}
}
Örnekte de görüldüğü gibi is_active fonksiyonunda kullanıcı aktif ise "Active" değeri dönerken, kullanıcı pasif ise "Passive" değeri dönmektedir. Bilindiği üzere return ifadesi çalışırsa php kod bloğunu es geçer ve else ifadesi asla çalışmaz. Bu yüzden kullanımı gereksiz ve zaman kaybıdır. Bunun yerine yazımı daha hızlı ve okunurluğu daha başarılı olan şu yöntemi kullanabilirsiniz
function is_active(bool $user) {
if ($user->active) {
return "Active";
}
return "Passive";
}
Bu yöntemde $user->active değeri true değilse doğrudan bloğun sonundaki return "Passive" çalışacaktır. Böylece gereksiz kod yazımından kaçınmış olacaksınız
2: (Kodu if/else bloklarının içine hapsetmek)
Mesleğe yeni başlayanlardan ziyade eski yazılımcılarda daha çok gördüğüm bu yöntem aslında okunabilirliği zorlaştırdığı gibi düzenlemelerde de kafa karışıklığına sebep olmaktadır. Bir fonksiyon yazarken zorunlu parametreleri kontrol etme işlemini ve parametre boşsa yada tipi uyumsuzsa hata mesajı dönmeyi en başta yapmak her zaman daha iyidir.
function getPosts($category)
{
if ($category) {
$posts = $category->posts();
return response(['data' => $posts], 200);
} else {
return response(['error' => 'Category not found'], 404);
}
}
Bu örnekte görüldüğü üzere getPosts fonksiyonunda category değişkeni var ise postları dönerken, yok ise hata mesajı dönmektedir. İleriki dönemlerde bu fonksiyona kategoriye ait başka bilgilerin de dönmesi için düzenleme yapılacağı zaman yazılacak olan kod if bloğunun içinde hapsolacaktır. Ancak fonksiyon aşağıdaki şekilde ayarlandığında kodu yazmak ve düzenlemek için daha geniş alana ve daha kolay okunabilirliğe sahip olacaktır.
function getPosts($category)
{
if (!$category) {
return response(['error' => 'Category not found'], 404);
}
$posts = $category->posts();
return response(['data' => $posts], 200);
}
3: (Birden çok değeri doğrulama)
Diyelim ki belirli bir değişkenin birçok diziden biri olup olmadığını bulmak istiyoruz, bunu doğrulamak için bir sürü koşullu ifade (if else, switch case) yazmamız gerekecek:
$productName = "laptop";
switch ($productName) {
case 'laptop':
return true;
case 'phone':
return true;
default:
return false;
}
// yada
if ($item == 'candy' || $item == 'toy') {
return true;
}
return false;
Peki kodumuzu bu kaosun içinden nasıl çıkarabiliriz. Temiz kullanımı;
if (in_array($productName, ["laptop", "phone"])) {
return true;
}
return false;
yada
return in_array($prouctName, ["laptop", "phone"]);
4: ("??" Tek parçalı satır içi koşul)
?? 2 parça olmadan satır içi koşullar oluşturmanın en kolay yoludur. Peki bu ne demek? Örneğimize bakalım;
$data = [
"a" => 1,
"b" => 2,
"c" => null,
];
return $data["c"] ? $data["c"] : "No data";
Kodumuzda da görüldüğü gibi $data isimli array'imizde c olarak tanımlı parçamız boş/null/false/0 değilse dönsün, boş/null/false/0 ise "No data" yazısı dönsün istiyoruz. Peki bunun için ?? kullansaydık daha kolay değil miydi?
return $data["c"] ?? "No data";
5: (PHP + HTML)
Bu, PHP'de HTML yazmak istediğinizde geçerlidir. Genellikle şöyle kullanıldığını görürüz:
<?php
foreach ($items as $item) {
echo "
<div class='product'>
<h3>{$item->name}</h3>
</div>
";
}
?>
Bu yöntem hatalı olarak adlandırılmasa da okunabilirlik açısından sıkıntılıdır. Araya kod eklemek yada if koşulları kullanmak istediğimizde zorluklara sebep olur.
<?php foreach ($items as $item): ?>
<div class="product">
<h3><?php echo $item->name; ?></h3>
<?php if($product->detail):
<span>$product->detail</span>
<?php endif;?>
</div>
<?php endforeach; ?>
Bu şekilde kullanıldığında okumak da düzenlemek de daha kolaydır. HTML biçimlendirmemizi ve kod hizalamamızı nasıl koruduğumuzu açıkça görebilirsiniz. PHP ile ilgili en önemli şeylerden biri, aynı şeyin birçok farklı şekilde yapılmasına nasıl izin verdiğidir.
foreach (...):
// kod
endforeach;
if (...):
// kod
endif;
if (...) #tek satır kod
while():
// kod
endwhile;