WordPress için PHP Kodlama Kılavuzu - Mustafa KÜÇÜK

WordPress için PHP Kodlama Kılavuzu

WordPress için PHP Kodlama Kılavuzu

React Native makalemden sonra tekrar asıl uzmanlığım olan WordPress konusunda makale yazmak istiyorum. Düzensiz kodlamaları önlemek ve yazılan kodları daha da okunaklı hale getirmek için WordPress’in hazırladığı kodlama standartları var, bunları elimden geldiğince ayrıntılı bir şekilde anlatmaya çalışacağım.

Tırnak Kullanımı

Aslında pek önemsiz görünsede hem sizin işinizi kolaylaştırmak için hemde daha okunaklı olması için tırnakları düzgün bir şekilde kullanmak önemli.

Eğer statik bir metin oluşturuyorsanız tek tırnak, dinamik bir metin oluşturuyorsanız çift tırnak kullanmalısınız.

Hemen örnek verelim.

Edit: Bu makaleyi yazarken siteme syntax eklentisini kurmayı unutmuşum, hemen kurup geliyorum.

Kurdum, bakalım nasıl görünecek, neyse konumuza dönelim.

echo '<a href="/static/link" title="Yeah yeah!">Link name</a>';
echo "<a href='$link' title='$linktitle'>$linkname</a>";

Gördüğünüz gibi statik içeriklerde tek tırnak kullanırken dinamik içeriklerimizde çift tırnak kullanıyoruz. Bunun en önemli sebebi eğer dinamik içeriklere tek tırnak ile başlasaydık değişken kullanabilmek için tırnak içinde tırnak kullanmamız gerekecekti.

Sizinde bildiğiniz gibi PHP’de çift tırnak kullandığımız zaman değişkenleri ekrana bastırmak için ekstra bir şey yapmamıza gerek kalmıyor.

Girintiler

WordPress girinti yaparken boşluk yerine tab kullanmamızı istiyor.

İstisna: Eğer kod bloklarınız hizalanmış ve okunaklı ise daha da okunaklı yapmak için boşluk kullanabilirsiniz

[tab]$foo   = 'somevalue';
[tab]$foo2  = 'somevalue2';
[tab]$foo34 = 'somevalue3';
[tab]$foo5  = 'somevalue4';

Dizilerde Girinti Kullanımı

Eğer dizileriniz birden fazla veri içeriyorsa her veri yeni satırda başlamalıdır.

<?php 
## Tek veri var ise ##
$query = new WP_Query( array( 'ID' => 123 ) );

## Birden fazla veri var ise ##
$query = new WP_Query( array( 
[tab]'post_type'   => 'page',
[tab]'post_author' => 123,
[tab]'post_status' => 'publish',
) );
?>

Not: Son satırda isteğe bağlı olarak ‘,’ bırakmanız daha iyi olacaktır, daha sonra veri eklediğinizde veya sıralamayı değiştirmek istediğinizde size kolaylık sağlayacaktır.

Switch Yapısında Girinti Kullanımı

Switch yapısında case için 1 tab, break yapısı içinse case içinde 1 tab kullanmanız yetecektir.

<?php
    switch ( $type ) {
    [tab]case 'foo':
    [tab][tab]some_function();
    [tab][tab]break;
    [tab]case 'bar':
    [tab][tab]some_function();
    [tab][tab]break;
    }
?>

elseif Kullanın, else if değil.

Aslında bu kullanımda tamamen opsiyonel, WordPress kodlarımıza göre hangisi uygunsa onu kullanacağımızı belirtiyor ama yine de elseif  kullanmamızı istiyor.

elseif ile else if arasında ne fark var?

Evet aklınızda beliren ilk sorunun cevabını hemen vereyim.

Aslında normal şartlarda iki kullanımda aynı sonucu döndürür, ancak eğer if kodlarını : kullanarak yazdıysanız else if maalesef hata verecektir o yüzden elseif kullanmanız gerekecektir.

Hemen örnekleyelim.

<?php
    ## Hata Vermez - Çalışır ##
    if (birinci_kosul) {
        // ...
    }elseif (ikinci_kosul) {
        // ...
    }
    
    if (birinci_kosul):
      // ...
    elseif (ikinci_kosul):
      // ...
    endif;
    
    ## Hata Verir - Çalışmaz ##
    
    if (birinci_kosul):
      // ...
    else if (ikinci_kosul):
      // ...
    endif;
?>

PHP Etiketlerini Açma ve Kapatma

Eğer çok satırlı php kodlarınızı html içine yerleştireceksiniz <?php ve ?> etiketlerini tek başına bir satırda kullanın.

<?php

## Doğru ##
function foo() {
    ?>
        <div>
        <?php
        echo bar(
            $baz,
            $bat
        );
        ?>
        </div>
    <?php
}

?>

<input name="<?php echo esc_attr( $name ); ?>" />

<?php

## Yanlış ##
if ( $a === $b ) { ?>
<some html>
<?php }

Umarım aradaki farkı anlatabilmişimdir 🙂

Not: PHP etiketlerinde sakın kısa kod kullanmayın, her zaman tam halini kullanın.

Gereksiz Boşlukları Kaldırın

PHP kapatma etiketinin sonundaki boşlukları kaldırmanız ve dosyaların sonuna kapatma etiketi koymamanız önemle rica olunur.

Boşluk Kullanımı

Virgülden sonra boşluk kullanabilirsiniz, mantıksal operatörlerin ve dizilerdeki verilerin başına ve sonunda boşluk kullanmalısınız.

x == 23
foo && bar
! foo
array( 1, 2, 3 )
$baz . '-5'
$term .= 'X'

if, elseif, for ve  switch yapısında açma ve kapatma parantezlerinin yanında bir boşluk bırakmalısınız.

foreach ( $foo as $bar ) { ...

Fonksiyon tanımlarken:

function my_function( $param1 = 'foo', $param2 = 'bar' ) { ...
 
function my_other_function() { ...

Bir fonksiyonu çağırırken:

my_function( $param1, func_param( $param2 ) );
my_other_function();

Mantıksal karşılaştırma yaparken:

if ( ! $foo ) { ...

Tür dönüşümü yaparken:

foreach ( (array) $foo as $bar ) { ...
 
$foo = (boolean) $bar;

Dizilere atıfta bulunurken:

$x = $foo['bar']; // doğru
$x = $foo[ 'bar' ]; // yanlış
 
$x = $foo[0]; // doğru
$x = $foo[ 0 ]; // yanlış
 
$x = $foo[ $bar ]; // doğru
$x = $foo[$bar]; // yanlış

Switch yapısında case yazarken ilgili koda boşluk koymamalısınız. Yani:

switch ( $foo ) {
    case 'bar': // correct
    case 'ba' : // incorrect
}

Aynı şekilde dönüş türü bildirimlerinde boşluk olmamalıdır.

function sum( $a, $b ): float {
    return $a + $b;
}

Özel bir durum olmadıkça parantez içinde boşluk kullanılmalıdır.

if ( $foo && ( $bar || $baz ) ) { ...
 
my_function( ( $x - 1 ) * 5, $y );

SQL Biçimlendirme

SQL kodlarınızı birkaç satır halinde yazabilir eğer karmaşık duruyorsa girinti ekleyebilirsiniz. Ayrıca UPDATE ve WHERE gibi ifadeleri her zaman büyük harfle yazmanız önerilir.

Veritabanında güncelleme işlemi yaparken  $wpdb->prepare() kullanabilirsiniz.

$var = "dangerous'";
$id = some_foo_number();
 
$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_title = %s WHERE ID = %d", $var, $id ) );

%s string %d tam sayılar için kullanılır.

Veritabanı Sorguları

Veritabanıyla doğrudan işlem yapmak yerine ihtiyacınız olan verileri alan veya işleyen bir fonksiyon var ise onu kullanabilirsiniz.

Eğer gerçekten işlem yapmanız gerekiyorsa WordPress geliştiricilerinin listesine ulaşarak ve onlara e-posta atarak bir sonraki sürümde eklemelerini isteyebilirsiniz. Eklemeleri tamamen kendi insiyatiflerindedir.

Liste

Not: Elbette kendiniz işlem yapıp düzenleme yapabilirsiniz ama güvenlik açısından bunu düşünebilirsiniz.

Adlandırma Kuralları

WordPress diyor ki: Değişken isimleri yazarken küçük harfler kullanabilirsiniz, fonksiyon veya action/filter yazarken asla camelCase şeklinde bir adlandırma yapmayın.

Bunun yerine alt tire kullanarak ayırın, değişken isimlerini gereksiz yere kısaltmayın, kodun anlaşılır olmasını sağlayın.

function some_name( $some_variable ) { [...] }

Sınıflarda ise tüm kelimelerin ilk harfi büyük olmalı ve eğer kısaltma kullanıyorsanız tüm harfler büyük olmalıdır.

class Walker_Category extends Walker { [...] }
class WP_HTTP { [...] }

Eğer sabit yazıyorsanız tüm harfler büyük olmalı ve alt tire ile ayrılmalıdır.

define( 'DOING_AJAX', true );

Dosya isimleri ise tamamen küçük olmalı kelimeler tire “-” ile ayrılmalıdır.

my-plugin-name.php

camelCase Nedir Peki?

camelCase yazımından da anlayabileceğiniz ilk kelimenin küçük daha sonraki kelimelerin büyük harfle başlamasıdır.

Okunabilirlik mi? Kısa kod mu?

WordPress’in kendi sitesinde başlık “Zeki Kod” olarak geçse de biraz tuhaf geldiği için bu şekilde adlandırmak daha mantıklı geldi.

“Genelde okunabilirlik, zekilikten veya kısacılıktan daha önemlidir.” – WordPress

isset( $var ) || $var = some_function();

Yukarıdaki kodlar her ne kadar daha kısa ve akıllıca olsa da aşina olmayanlar için anlaşılması daha zor olacaktır. Aşağıdaki gibi yazmayı düşünebilirsiniz.

if ( ! isset( $var ) ) {
    $var = some_function();
}

Ayrıca evel() fonksiyonu kesinlikle kullanılmamalıdır.


Evet arkadaşlar okuduğunuz gibi biraz uzun bir makale oldu, ama sizler için rehber niteliği taşıyacağınız düşünüyorum. Bazı yerleri üşendiğimden veya önemli görmediğimden atladım.

Not: Bu makale WordPress’in kendi rehberinin tamamen çevirisi değildir, daha iyi anlaşılması için kendi açıklamlarımı kullandığım yerler oldu.

Kaynak ve İleri Okuma: https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/


2 Yorum var

onur taşcı

güzel anlatım olmuş, bir de editör tavsiyesi alabilir miyim

4 Haziran 2018

    mustafakucuk

    Selam, tabi. Ben VSCode ve Atom kullanıyorum ama bu editörler sistemin donanımına göre performans gösteriyor, eğer çok hızlı işlem yapmak istiyorsam Sublime Text kullanıyorum.

    9 Temmuz 2018