PHP öğrenmek için en verimli sıra şudur: önce dilin sözdizimini, değişkenleri, veri tiplerini ve kontrol yapılarını oturtun; ardından fonksiyonlara, tip bildirimlerine ve dizilere geçin; sonra sınıflar, arayüzler ve enum gibi nesne yönelimli özellikleri öğrenin; en son hata yönetimi, standart kütüphane ve sürüm farklarıyla bilginizi tamamlayın. Bu sayfa, php.net resmî kılavuzunun dil referansı bölümünü temel alan 50 yazılık serinin haritasıdır ve diğer 49 yazının tamamını bu öğrenme yoluna göre gruplar.

Her yazıdaki kod örnekleri PHP 8.5.12 komut satırı sürümüyle (CLI) gerçekten çalıştırıldı ve yorum satırlarındaki çıktılar bu çalıştırmalardan alındı. PHP'nin ne olduğunu, kısa tarihçesini, framework ekosistemini ve kullanım alanlarını merak ediyorsanız önce PHP nedir yazısını okuyabilirsiniz. Bu seri ise doğrudan dilin kendisine odaklanır: sunucu ayarları, php.ini ince ayarı veya hosting konuları burada işlenmez.

Seriyi takip etmek için PHP CLI kurulumu

Seriyi takip etmek için PHP CLI kurulumu: Windows, Debian ve Ubuntu, macOS

Örnekleri kendi bilgisayarınızda denemek için bir web sunucusuna ihtiyacınız yok. PHP'nin komut satırı arayüzü (CLI SAPI) bir dosyayı doğrudan çalıştırıp çıktısını terminale yazar. Kılavuzun kurulum bölümü işletim sistemine göre farklı yollar tarif eder:

  • Windows: php.net'in Windows indirme sayfasındaki hazır derlenmiş paketler önerilir. Kılavuz komut satırı betikleri için iş parçacığı güvenli olmayan (Non-Thread-Safe, NTS) yapıyı önerir; 64 bit sistemde x64 paketini seçin. PHP, Visual C++ çalışma zamanına (Visual C++ Redistributable) ihtiyaç duyar. Arşivi bir klasöre açıp php.exe dosyasının bulunduğu klasörü PATH ortam değişkenine eklediğinizde her dizinden php komutunu kullanabilirsiniz.
  • Debian ve Ubuntu: Paket listesini apt update ile güncelledikten sonra komut satırı paketi php-cli adıyla kurulur. Ek eklentiler de ayrı paketler hâlinde gelir. Kılavuz, dağıtım paketlerinin PHP projesi tarafından değil dağıtım tarafından hazırlandığını hatırlatır.
  • macOS: Kılavuzun önerdiği kolay yol Homebrew paket yöneticisidir; Homebrew kurulduktan sonra brew install php komutu yeterlidir.
bash
# Debian / Ubuntu
sudo apt update
sudo apt install php-cli

# macOS (Homebrew)
brew install php

# Kurulumu doğrulayın
php -v

php -v komutu sürüm numarasını, kullanılan arayüzü (cli) ve Zend motorunun sürümünü yazar. Bu serinin örneklerini çalıştırdığımız Windows paketinde çıktı şöyledir:

text
PHP 8.5.12 (cli) (built: Oct 26 2026 09:51:07) (NTS Visual C++ 2022 x64)
Copyright (c) The PHP Group
Built by The PHP Group
Zend Engine v4.5.12, Copyright (c) Zend Technologies
    with Zend OPcache v8.5.12, Copyright (c), by Zend Technologies

Sizin çıktınızda sürüm numarası ve derleme tarihi farklı olabilir. Serideki örneklerin çoğu PHP 8.0 ve sonrasında çalışır; yalnızca 8.4 veya 8.5 ile gelen bir özellik kullanıldığında bunu yazıda ayrıca belirtiyoruz, çünkü pek çok sunucu hâlâ daha eski sürümlerle çalışır.

İlk PHP dosyanızı çalıştırın

Bir metin düzenleyicide merhaba.php adında bir dosya oluşturun ve aşağıdaki kodu UTF-8 kodlamasıyla kaydedin. Dosya <?php açılış etiketiyle başlar; dosyada yalnızca PHP kodu olduğu için kapanış etiketi yazılmaz. Bu alışkanlığın nedenini temel sözdizimi yazısında açıklıyoruz.

php
<?php
$ad = 'Dünya';
$saat = 14;
$selam = $saat < 12 ? 'Günaydın' : 'İyi günler';

echo "$selam, $ad!", PHP_EOL;                         // çıktı: İyi günler, Dünya!
echo 'PHP sürümü: ', PHP_MAJOR_VERSION, '.', PHP_MINOR_VERSION, PHP_EOL; // çıktı: PHP sürümü: 8.5
var_dump(strlen($ad), mb_strlen($ad));
/* çıktı:
int(6)
int(5)
*/
bash
php merhaba.php

Bu kısa örnekte serinin ilk yazılarında göreceğiniz birçok parça bir arada: $ ile başlayan değişkenler, ?: üçlü operatörü, çift tırnak içinde değişken yerleştirme, echo ile virgülle ayrılmış birden fazla değer yazdırma ve PHP_EOL gibi önceden tanımlı sabitler. Son satır ise ayrıca önemli bir dersi özetliyor: strlen() bayt sayar ve "Dünya" kelimesindeki ü harfi UTF-8'de iki bayt olduğu için 6 döner; karakter saymak için mbstring eklentisindeki mb_strlen() gerekir.

Kodu dosyaya yazmak yerine php -r ile tek satırda da çalıştırabilirsiniz; bu durumda açılış etiketi yazılmaz. Ancak kabuğun tırnak ve $ işaretlerini yorumlaması sorun çıkarabildiği için serideki örnekleri dosya olarak çalıştırmanızı öneririz. Komut satırı seçeneklerinin tamamı, $argv ve yerleşik geliştirme sunucusu PHP CLI yazısında anlatılıyor.

1. Temeller

Bu bölüm, her PHP betiğinin yapı taşlarını kapsar. Sırayla okumanızı öneririz; sonraki bölümlerin neredeyse tamamı buradaki kavramlara dayanır.

  • PHP temel sözdizimi: etiketler ve yorumlar: <?php etiketi, dosya sonunda kapanış etiketini neden yazmamanız gerektiği, noktalı virgül kuralı, yorum türleri, echo ve print farkı ve PHP'yi HTML içine gömme.
  • PHP değişkenler ve kapsam: Değişken adlandırma kuralları, değerle atama, fonksiyon kapsamı, global ve static anahtar kelimeleri, değişken değişkenler ve süper global dizilere kısa giriş.
  • PHP sabitler: define ve const: İki tanımlama yönteminin farkı, sihirli sabitler (__DIR__, __LINE__ ve diğerleri) ve PHP_VERSION gibi önceden tanımlı sabitler.
  • PHP veri tipleri: int, float, bool, null, string, array ve object tiplerine genel bakış; var_dump(), gettype() ve get_debug_type() ile tip inceleme, tür dönüşümleri.
  • PHP operatörler ve öncelik: Aritmetik, atama, mantıksal ve metin operatörleri, ?? ve ??=, uzay gemisi operatörü <=> ve öncelik tablosu.
  • PHP if, else, switch ve match: Koşullu yapılar, switch ile match arasındaki gevşek ve katı karşılaştırma farkı, UnhandledMatchError ve şablonlar için alternatif sözdizimi.
  • PHP döngüler: for, foreach, while: for, anahtar ve değerle foreach, referansla döngü, while ve do-while, iç içe döngülerde break ve continue kullanımı.

2. Fonksiyonlar ve tip sistemi

2. Fonksiyonlar ve tip sistemi: PHP fonksiyon tanımlama ve parametreler, PHP anonim fonksiyon ve arrow function, PHP tip bildirimleri ve strict_types, PHP eşitlik, karşılaştırma...

Temelleri oturttuktan sonra kodunuzu fonksiyonlara bölmeyi ve PHP'nin tip sistemini öğrenin. Bu bölüm, modern PHP kodunun okunaklı ve güvenli olmasını sağlayan kuralları içerir.

3. Diziler ve metin işleme

PHP uygulamalarında verinin büyük bölümü diziler ve metinler üzerinden akar. Bu bölüm, iki veri tipini de günlük işlerde kullanacağınız fonksiyonlarla birlikte ele alır.

  • PHP string fonksiyonları: Tek ve çift tırnak farkı, heredoc ve nowdoc, str_contains(), str_starts_with(), substr(), str_replace(), explode(), implode() ve trim().
  • PHP dizi (array) temelleri: Dizi sözdizimi, anahtar kuralları, list() ve köşeli parantezle parçalama (destructuring), yayma operatörü ve çok boyutlu diziler.
  • PHP dizi fonksiyonları: array_map, array_filter: array_map(), array_filter(), array_reduce(), array_column(), in_array(), array_search() ve PHP 8.4 ile gelen array_find().
  • PHP dizi sıralama: sort ve usort: sort, asort, ksort ailesi, kendi karşılaştırma fonksiyonunuzla usort ve sıralama fonksiyonlarının karşılaştırma tablosu.
  • PHP mbstring ile UTF-8 ve Türkçe karakter: strlen ile mb_strlen farkı, mb_substr(), Türkçe i ve I harflerinde büyük-küçük harf davranışı, PHP 8.4 ile gelen mb_ucfirst() ve mb_trim().
  • PHP sprintf, printf ve number_format: Biçim belirticileri, dolgu ve hassasiyet ayarı, number_format() ile Türkçe binlik ve ondalık ayırıcı.
  • PHP preg_match ile regex: PCRE fonksiyonları preg_match(), preg_match_all(), preg_replace(), preg_replace_callback(), preg_split() ve UTF-8 için u bayrağı.

4. Nesne yönelimli PHP

Sınıflar, büyük projelerde kodu düzenlemenin temel aracıdır. Bu bölüm sınıf tanımından başlayıp kalıtım, trait ve görünürlük kurallarına kadar ilerler.

5. Modern PHP özellikleri

PHP 8 serisiyle gelen ve bugün yeni kodda sıkça gördüğünüz özellikler bu bölümde. Ad alanları ve otomatik yükleme ise her orta ölçekli projenin altyapısını oluşturur.

  • PHP enum kullanımı: Saf ve değer destekli (backed) enum, cases(), from() ve tryFrom(), enum metotları, arayüz uygulama ve match ile birlikte kullanım.
  • PHP property hooks: PHP 8.4 ile gelen özellik kancaları: get ve set, sanal özellikler ve arayüzde özellik tanımlama.
  • PHP attributes (öznitelikler): #[...] sözdizimi, kendi öznitelik sınıfınızı yazma, Reflection ile okuma ve PHP 8.4 ile gelen #[\Deprecated].
  • PHP namespace ve use: Ad alanı tanımlama, use ile içe aktarma ve takma ad, global geri dönüş kuralı, use function ve use const.
  • PHP autoload ve spl_autoload_register: Sınıfları ihtiyaç anında yükleyen spl_autoload_register() ve ad alanını klasör yapısına eşleyen PSR-4 benzeri bir yükleyici.
  • PHP clone ve nesne karşılaştırma: Nesnelerin tutamaç (handle) mantığıyla aktarılması, clone ve __clone ile derin kopya, nesnelerde == ve ===, kısaca WeakMap.

6. Hata yönetimi ve ileri konular

6. Hata yönetimi ve ileri konular: PHP try, catch ve exception, PHP error_reporting ve hata seviyeleri, PHP generator ve yield, PHP Fiber kullanımı

Sağlam bir uygulama, hataları öngörüp kontrollü biçimde ele alır. Bu bölüm istisna sistemini ve PHP'nin bellek dostu yineleme ile eş zamanlılık araçlarını kapsar.

  • PHP try, catch ve exception: throw, try/catch/finally, çoklu yakalama, Throwable, Exception ve Error hiyerarşisi, kendi istisna sınıflarınız.
  • PHP error_reporting ve hata seviyeleri: E_* sabitleri, error_reporting(), set_error_handler(), uyarıları ErrorException'a çevirme ve @ operatörü.
  • PHP generator ve yield: yield, anahtarla yield, yield from, send(), büyük veride bellek avantajı ve iterable tipi.
  • PHP Fiber kullanımı: Fiber sınıfının start, suspend, resume ve getReturn metotları, generator ile farkı ve sınırları.

7. Standart kütüphane ve araçlar

PHP'nin standart kütüphanesi, dış paket kurmadan pek çok işi çözer. Bu bölümde veri biçimleri, tarih, dosya, veritabanı, güvenlik ve komut satırı konuları var.

8. Sürümler ve sık hatalar

Son bölüm, sürüm yükseltirken karşılaşacağınız değişiklikleri ve PHP'nin en sık gördüğünüz hata mesajlarını tek tek çözer. Bir hata mesajıyla karşılaştığınızda doğrudan buraya gelebilirsiniz.

  • PHP 8.4 yenilikleri: Property hooks, asimetrik görünürlük, lazy objects, parantezsiz new zincirleme, array_find(), mb_trim() ve diğer 8.4 değişiklikleri.
  • PHP 8.5 yenilikleri: Pipe operatörü |>, özellik değiştirerek clone(), #[\NoDiscard], array_first() ve array_last(), URI eklentisi ve diğer 8.5 yenilikleri.
  • PHP 8.4 deprecated uyarıları: Örtük nullable parametre tipi, E_STRICT ve 8.4'te kullanımdan kaldırılan diğer özellikler; her biri için düzeltme yolu.
  • PHP undefined variable ve array key uyarısı: "Undefined variable", "Undefined array key" ve "Undefined property" uyarılarının nedeni; isset(), ?? ve array_key_exists() ile çözüm.
  • PHP TypeError ve ArgumentCountError: TypeError, ArgumentCountError, ValueError ve DivisionByZeroError mesajlarını okuma ve düzeltme.
  • PHP Fatal error: Uncaught Error çözümü: "Call to undefined function", "Call to undefined method", "Cannot redeclare" ve "syntax error, unexpected" biçimindeki ParseError mesajları.

Seriyi nasıl okumalısınız?

PHP'ye yeni başlıyorsanız ilk iki bölümü sırayla okuyun ve her örneği kendiniz çalıştırın; çıktıyı yazıdaki yorumla karşılaştırmak, dilin kurallarını ezberlemekten çok daha kalıcı öğrenme sağlar. Başka bir dilden geliyorsanız özellikle tip dönüşümü, karşılaştırma ve referans yazılarına zaman ayırın, çünkü PHP'nin bu konulardaki davranışı JavaScript, Python veya Java'dan farklıdır. Mevcut bir projeyi yeni sürüme taşıyorsanız son bölümdeki sürüm ve deprecated yazılarıyla başlayabilirsiniz.

Her yazı kendi konusunun sınırında kalır ve komşu konuya bağlantı verir. Örneğin koşul yapıları yazısı == karşılaştırmasının ayrıntılarına girmez, bunun yerine karşılaştırma yazısına yönlendirir. Böylece bir kavramı tek bir yerde derinlemesine öğrenir, diğer yazılarda yalnızca nasıl kullanıldığını görürsünüz. Her yazının sonundaki kaynak kutusu, bilgilerin alındığı php.net kılavuz sayfalarını listeler; ayrıntıya inmek istediğinizde oradan devam edebilirsiniz.

Sık Sorulan Sorular

PHP öğrenmek için hangi sürümü kurmalıyım?

Yeni öğreniyorsanız php.net'in desteklediği güncel bir sürüm kurun. Bu serideki örnekler PHP 8.5.12 ile çalıştırıldı; örneklerin büyük çoğunluğu PHP 8.0 ve sonrasında da çalışır. Sürüme bağlı bir özellik kullandığımızda yazıda bunu belirtiyoruz. Projeniz bir sunucuda çalışacaksa oradaki sürümü kontrol edin; sunucu tarafında sürüm seçimi PHP hosting rehberinde anlatılıyor.

Örnekleri çalıştırmak için web sunucusu gerekli mi?

Hayır. Serideki örneklerin tamamı komut satırında php dosya.php ile çalışır. Web sunucusu gerektiren tek konu, tarayıcıdan gelen form ve istek verileridir; onlar için bile geliştirme aşamasında PHP'nin yerleşik sunucusunu (php -S) kullanabilirsiniz.

Composer, Laravel veya Symfony bu seride var mı?

Hayır. Bu seri php.net kılavuzunun kapsadığı dilin kendisini ve standart kütüphaneyi anlatır. Framework'ler ve paket yöneticisi bu dil bilgisinin üzerine kurulur; PHP ekosistemine genel bakış için PHP nedir yazısına bakabilirsiniz.

Hangi yazıdan başlamalıyım?

PHP'yi hiç kullanmadıysanız temel sözdizimi yazısıyla başlayın, ardından değişkenler ve veri tipleri yazılarıyla devam edin. Bir hata mesajını çözmeye çalışıyorsanız doğrudan sekizinci bölüme geçin.

Marka adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen kuruluşlarla bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.

İlgili içerikler: PHP nedir? · PHP temel sözdizimi · PHP CLI kullanımı · PHP hosting rehberi