En Sık Karşılaşılan Kodlama Standardı Hataları

Aynı birkaç hata, şaşırtıcı derecede tutarlı bir şekilde projeden projeye tekrar ediyor. Bu bölüm, en sık karşılaşılanların hızlı bir referans listesi — ve her birinin neden bir kılı kırk yarma değil, gerçekten yakalanmaya değer bir şey olduğu.

1. Alışılagelmiş Şüpheliler

Liste bir kod tabanından diğerine neredeyse hiç değişmiyor:

  • 2 yerine 4 boşluk kullanılması.
  • Girinti için boşluk yerine tab kullanılması.
  • [] yerine eski array() sözdiziminin hâlâ kullanılması.
  • Çok satırlı bir dizide sondaki virgülün unutulması.
  • Bir namespace ya da class adının kendi dosya yoluyla eşleşmemesi.
  • Bir service class'ının dependency injection olmadan kurulması.
  • Çevrilmesi gereken metnin sabit bir string olarak yazılması.
  • Bir Twig şablonunda gereksiz bir |raw filtresi kullanılması.
  • Bir JavaScript behavior'ında once()'ın atlanması.
  • Yeni kodda hâlâ deprecated bir Drupal API'sinin çağrılması.

2. Eski Dizi Sözdizimi

En yaygın olanı: her yerde kısa dizi sözdizimi kullanılması gereken kodda hâlâ karşımıza çıkan array().

// ❌ Eski sözdizimi: array().
$items = array(
'one',
'two',
);

// ✅ Güncel sözdizimi: kısa dizi literali.
$items = [
'one',
'two',
];

Tek başına bakıldığında fark önemsiz. Binlerce satırlık bir kod tabanında yüzlerce kez tekrarlandığında ise küçük de olsa gerçek bir bakım maliyetine dönüşüyor — ve genelde dosyanın geri kalanının da bir süredir phpcbf'ten geçmediğinin işareti.

3. Atlanan Dependency Injection

Servisin constructor üzerinden gelmesi yerine bir method'un içinden container'a uzanan statik bir \Drupal::service() çağrısı, tek başına tekrar değinilmeye değecek kadar yaygın — bu kuralın tam hali ve testler için neden önemli olduğu için mimari bölümüne bakın.

4. Çevrilmemiş Metinler

Son kullanıcıya yönelik olup t() ya da |t filtresi üzerinden geçmek yerine doğrudan bir şablona ya da bir render array'e yazılan metin, hızlı bir review'da gözden kaçması kolay bir hatadır, çünkü birisi siteyi çevirmeye çalışana kadar sayfa hâlâ doğru görünür.

// ❌ Yanlış: hiçbir zaman çeviri sistemine ulaşmıyor.
$build['#markup'] = 'No products found.';

// ✅ Doğru: t() üzerinden geçiyor.
$build['#markup'] = $this->t('No products found.');

5. Bunlar Neden Bir Araya Geliyor

Bunların hiçbiri tek başına hiçbir şeyi bozmuyor. Değişen şey, bir kod tabanının büyüdükçe içinde çalışmanın nasıl hissettirdiği: standartlara tutarlı şekilde uyan bir kod tabanında yeni bir geliştirici bir hafta içinde üretken olabiliyor; uymayan birinde ise aynı haftayı, elinde iyi bir cevap olmadan işlerin neden belirli bir şekilde yapıldığını sorarak geçiriyor. PHP_CodeSniffer, PHPStan, ESLint ve Stylelint gibi araçlar tam olarak bunların hiçbirinin ezberle yakalanmak zorunda kalmaması için var — bir kere doğru kurulduklarında, büyük çoğunluğunu otomatik olarak yakalıyorlar.

Son güncelleme: 21.09.2026 10:02