Yeni Başlayanlar için PHP: Kurulum ve Temel Sözdizimi

Yeni Başlayanlar için PHP: Kurulum ve Temel Sözdizimi

4 dakika okuma

PHP, sunucu tarafında çalışan ve HTML çıktısı üreten bir betik dili. Bugün web sitelerinin büyük bölümü bu dille çalışıyor; WordPress, Laravel ve Symfony gibi yaygın sistemlerin tamamı PHP üzerine kurulu. Bu yazı seriye başlangıç noktası: çalışma ortamının kurulumu, temel sözdizimi ve ilk programın çalıştırılması ele alınıyor.

PHP bugün nerede çalışıyor?

PHP'nin yaygınlığı iki nedene dayanıyor. Birincisi, paylaşımlı hosting paketlerinde ek yapılandırma gerektirmeden çalışması. İkincisi, sürüm geçişlerinde geriye dönük uyumluluğun büyük ölçüde korunması. PHP 8 serisiyle birlikte dil, tip bildirimleri ve JIT derleyicisiyle performans tarafında da belirgin biçimde ilerledi.

Dilin tipik kullanım alanı istekle tetiklenen kısa ömürlü işlemler: bir HTTP isteği gelir, betik çalışır, çıktı üretilir ve süreç kapanır. Bu model uzun süre bellekte kalan uygulamalara göre daha az durum yönetimi gerektirir.

Yerel geliştirme ortamı

Başlangıç için ayrı bir sunucu yazılımı kurmaya gerek yok. PHP'nin kendi geliştirme sunucusu tek komutla ayağa kalkar ve küçük denemeler için yeterli:

PHP5 satır
# proje dizininde
php -S localhost:8000

# sürüm kontrolü
php -v

Bağımlılık yönetimi için Composer kullanılır. Üretim ortamında yerleşik geliştirme sunucusu değil, Nginx veya Apache arkasında PHP-FPM tercih edilir.

Geliştirme sırasında hata raporlamanın açık olması zorunludur. Kapalı bırakılan hata gösterimi, sorunun kaynağını boş sayfa haline getirir ve sebebi aramak gereksiz zaman kaybettirir. Üretimde ise tam tersi geçerlidir: hatalar ekrana basılmaz, dosyaya yazılır.

PHP7 satır
// yalnızca geliştirme ortamı için
ini_set('display_errors', '1');
error_reporting(E_ALL);

// üretim ortamı
ini_set('display_errors', '0');
ini_set('log_errors', '1');

İlk dosya ve temel sözdizimi

PHP kodu <?php etiketiyle başlar. Yalnızca PHP içeren dosyalarda kapanış etiketi yazılmaz, böylece dosya sonundaki boşlukların çıktıya karışması engellenir. Dosyanın başına eklenen strict_types bildirimi tip kontrolünü katı hale getirir ve sessiz tip dönüşümlerini engeller:

PHP9 satır
<?php
declare(strict_types=1);

$isim = 'Ayşe';
$yas = 34;
$aktif = true;
$puan = 4.75;

echo "Kullanıcı: {$isim}, yaş: {$yas}";

Değişken adları dolar işaretiyle başlar ve büyük küçük harf duyarlıdır. Çift tırnak içinde değişkenler yorumlanır, tek tırnakta yorumlanmaz. Bu ayrım beklenmedik çıktıların sık görülen kaynağıdır.

Tipler ve tip bildirimi

PHP dinamik tipli bir dil, ancak fonksiyon imzalarında tip bildirmek mümkün ve önerilir. Bildirim, hatanın çalışma anında değil çağrı anında yakalanmasını sağlar:

PHP7 satır
function toplam(int $a, int $b): int
{
    return $a + $b;
}

// strict_types=1 iken bu çağrı TypeError üretir
// toplam('5', 3);

Temel tipler string, int, float, bool, array ve null. Bir değişkenin tipini kontrol etmek için is_int, is_string gibi fonksiyonlar ya da gettype kullanılır.

Tip bildirimi olmayan kodda PHP dönüşümü kendi yapar ve sonuç şaşırtıcı olabilir. Metin bir sayıyla toplandığında hata değil sessiz bir dönüşüm oluşur. strict_types bildirimi tam olarak bu sessizliği ortadan kaldırdığı için her dosyanın başına eklenmesi önerilir.

Sabitler için const ya da define kullanılır. Sabit değerlerin kod içine dağıtılması yerine tek yerde tanımlanması, değer değiştiğinde tek noktaya dokunmayı sağlar.

Koşullar: if ve match

Klasik if yapısının yanında PHP 8 ile gelen match ifadesi, karşılaştırmayı katı biçimde yapar ve değer döndürür. Uzun switch blokları yerine daha okunur bir alternatif sunar:

PHP12 satır
$rol = 'editor';

$yetki = match ($rol) {
    'admin' => 'tam',
    'editor' => 'kısıtlı',
    default => 'yok',
};

if ($yetki === 'yok') {
    http_response_code(403);
    exit;
}

match, switch'ten farklı olarak tip dönüşümü yapmaz ve eşleşme bulunamazsa hata fırlatır. Bu davranış sessiz hataları erken ortaya çıkarır.

Composer ve otomatik yükleme

Proje birkaç dosyayı geçtiğinde her dosyayı elle dahil etmek sürdürülebilir olmaktan çıkar. Composer, hem dış paketleri yönetir hem de sınıfların otomatik yüklenmesini sağlar. PSR-4 standardına göre dizin yapısı ile ad alanı eşleştirilir ve dosya adı ile sınıf adı birebir aynı olur.

PHP9 satır
// composer.json
{
    "autoload": {
        "psr-4": { "App\\": "src/" }
    }
}

// giriş dosyasında tek satır yeter
require __DIR__ . '/vendor/autoload.php';

Bu yapı kurulduktan sonra yeni sınıf eklemek için hiçbir dahil etme satırı yazmak gerekmez. Dosya doğru dizine konduğunda otomatik olarak bulunur.

Sık yapılan hatalar

  • Kapanış etiketinden sonra bırakılan boşluk, başlık gönderilmeden önce çıktı üretilmesine ve oturum hatalarına yol açar.
  • Tek tırnak içinde değişken yorumlanmaz; çıktıda değişken adı görünür.
  • Karşılaştırmada == yerine === tercih edilmezse farklı tipler eşit sayılabilir.
  • Hata raporlama geliştirme ortamında kapalı bırakılırsa sorunun kaynağı görünmez olur.

PHP eğitim serisi

Bu yazı, temel sözdiziminden üretim ortamına kadar ilerleyen 25 bölümlük serinin bir parçası. Bölümler sırayla okunacak biçimde hazırlandı, ancak her biri tek başına da kullanılabilir.

Temeller

  1. Kurulum ve temel sözdizimi (bu yazı)
  2. Döngüler ve akış kontrolü
  3. Diziler
  4. Fonksiyonlar
  5. String fonksiyonları
  6. Süper globaller
  7. Form işleme
  8. Dosya işlemleri

Dilin ayrıntıları

  1. Tip sistemi ve strict_types
  2. Hata ve istisna yönetimi
  3. Düzenli ifadeler
  4. Tarih ve saat işlemleri

Nesne yönelimli PHP

  1. Sınıf ve nesne
  2. Kalıtım, arayüz ve trait
  3. Statik üyeler, sabitler ve enum
  4. Namespace, Composer ve autoload

Veri ve güvenlik

  1. PDO ile veritabanı işlemleri
  2. Oturum yönetimi ve kimlik doğrulama
  3. Güvenli çıktı ve XSS
  4. JSON ile veri değişimi

Dış dünya ve üretim

  1. cURL ile dış API çağırma
  2. Kendi REST API'ni yazmak
  3. PHPUnit ile birim test
  4. Hata ayıklama ve performans ölçümü
  5. Üretime alma ve güvenlik

Yorumlar

Bu form reCAPTCHA ile korunur; Google Gizlilik Politikası ve Hizmet Şartları geçerlidir.

İlk yorumu sen yap.

İlgili Yazılar