
Yeni Başlayanlar için PHP: Kurulum ve Temel Sözdizimi
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:
# proje dizininde
php -S localhost:8000
# sürüm kontrolü
php -vBağı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.
// 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:
<?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:
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:
$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.
// 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
- Kurulum ve temel sözdizimi (bu yazı)
- Döngüler ve akış kontrolü
- Diziler
- Fonksiyonlar
- String fonksiyonları
- Süper globaller
- Form işleme
- Dosya işlemleri
Dilin ayrıntıları
Nesne yönelimli PHP
- Sınıf ve nesne
- Kalıtım, arayüz ve trait
- Statik üyeler, sabitler ve enum
- Namespace, Composer ve autoload
Veri ve güvenlik
- PDO ile veritabanı işlemleri
- Oturum yönetimi ve kimlik doğrulama
- Güvenli çıktı ve XSS
- JSON ile veri değişimi
Dış dünya ve üretim
Yorumlar
İlk yorumu sen yap.
İlgili Yazılar

PHP Uygulamasını Üretime Almak: Yapılandırma ve Güvenlik
Geliştirme makinesinde çalışan kod ile üretimde güvenle çalışan kod arasındaki fark yapılandırmadır. Ayarlar, izinler, dağıtım akışı ve son kontroller.

PHP ile REST API Yazmak: Yönlendirme ve HTTP Durum Kodları
Bir API'nin kalitesi çoğunlukla ayrıntılarda belli olur: doğru durum kodu, tutarlı hata biçimi ve öngörülebilir adresler. Saf PHP ile uçtan uca kurulum.

PHPUnit ile Birim Test Yazmak: Kurulum, Sahte Nesneler ve Kapsam
Testin amacı hata bulmak değil, değişikliği güvenle yapabilmektir. Kurulum, ilk test, sahte nesneler ve test edilebilir kodun özellikleri.