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

Ö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.exedosyasının bulunduğu klasörüPATHortam değişkenine eklediğinizde her dizindenphpkomutunu kullanabilirsiniz. - Debian ve Ubuntu: Paket listesini
apt updateile güncelledikten sonra komut satırı paketiphp-cliadı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 phpkomutu yeterlidir.
# Debian / Ubuntu
sudo apt update
sudo apt install php-cli
# macOS (Homebrew)
brew install php
# Kurulumu doğrulayın
php -vphp -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:
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 TechnologiesSizin çı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
$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)
*/
php merhaba.phpBu 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:
<?phpetiketi, dosya sonunda kapanış etiketini neden yazmamanız gerektiği, noktalı virgül kuralı, yorum türleri,echoveprintfarkı 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ı,
globalvestaticanahtar 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) vePHP_VERSIONgibi önceden tanımlı sabitler. - PHP veri tipleri: int, float, bool, null, string, array ve object tiplerine genel bakış;
var_dump(),gettype()veget_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,
switchilematcharasındaki gevşek ve katı karşılaştırma farkı,UnhandledMatchErrorve şablonlar için alternatif sözdizimi. - PHP döngüler: for, foreach, while:
for, anahtar ve değerleforeach, referansla döngü,whilevedo-while, iç içe döngülerdebreakvecontinuekullanımı.
2. Fonksiyonlar ve tip sistemi

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.
- PHP fonksiyon tanımlama ve parametreler:
functionanahtar kelimesi, varsayılan değerler, isimli argümanlar, değişken sayıda argüman alan...parametreleri ve dönüş değeri. - PHP anonim fonksiyon ve arrow function: Closure ve
use, kısafnsözdizimi,strlen(...)biçimindeki birinci sınıf callable vecallabletipi. - PHP tip bildirimleri ve strict_types: Parametre ve dönüş tipleri, nullable, union ve intersection tipler,
void,never,mixedvedeclare(strict_types=1)etkisi. - PHP eşitlik, karşılaştırma ve tip dönüşümü:
==ile===farkı, otomatik tip dönüşümü (type juggling), sayısal metinler, karşılaştırma tabloları ve PHP 8 ile gelen değişiklik. - PHP referanslar:
&ile atama, referansla parametre geçirme ve döndürme,foreachreferans tuzağı veunset()ile referansı koparma.
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()vetrim(). - 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 gelenarray_find(). - PHP dizi sıralama: sort ve usort:
sort,asort,ksortailesi, kendi karşılaştırma fonksiyonunuzlausortve sıralama fonksiyonlarının karşılaştırma tablosu. - PHP mbstring ile UTF-8 ve Türkçe karakter:
strlenilemb_strlenfarkı,mb_substr(), Türkçe i ve I harflerinde büyük-küçük harf davranışı, PHP 8.4 ile gelenmb_ucfirst()vemb_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çinubayrağı.
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.
- PHP sınıf ve nesne:
class,new,$this, özellikler ve metotlar, yapıcı metot, constructor promotion ve PHP 8.4 ile parantezsiznewzincirleme. - PHP kalıtım, abstract ve interface:
extends,parent::, soyut sınıflar, arayüzler,finalve#[\Override]özniteliği. - PHP trait kullanımı: Trait tanımlama ve
use, çakışmalarıinsteadofveasile çözme, trait içinde soyut ve statik üyeler. - PHP public, private, protected ve readonly: Görünürlük kuralları, salt okunur özellikler ve sınıflar, PHP 8.4 ile gelen asimetrik görünürlük (
public private(set)). - PHP static ve late static binding: Statik özellik ve metotlar,
self::ilestatic::farkı,::operatörü ve sınıf sabitleri. - PHP sihirli metotlar:
__get,__set,__call,__toString,__invoke,__serializeveStringablearayüzü.
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()vetryFrom(), enum metotları, arayüz uygulama vematchile birlikte kullanım. - PHP property hooks: PHP 8.4 ile gelen özellik kancaları:
getveset, 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,
useile içe aktarma ve takma ad, global geri dönüş kuralı,use functionveuse 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ı,
cloneve__cloneile derin kopya, nesnelerde==ve===, kısacaWeakMap.
6. Hata yönetimi ve ileri konular

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,ExceptionveErrorhiyerarş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, anahtarlayield,yield from,send(), büyük veride bellek avantajı veiterabletipi. - PHP Fiber kullanımı:
Fibersınıfınınstart,suspend,resumevegetReturnmetotları, 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.
- PHP json_encode ve json_decode:
JSON_UNESCAPED_UNICODE,JSON_PRETTY_PRINTveJSON_THROW_ON_ERRORbayrakları, dizi olarak çözme,JsonSerializablevejson_validate(). - PHP DateTime ile tarih ve saat:
DateTimeileDateTimeImmutablefarkı, biçimlendirme,modify(),DateInterval,diff(), Europe/Istanbul saat dilimi veDatePeriod. - PHP dosya okuma ve yazma:
file_get_contents(),file_put_contents(),fopen/fgets/fclose,file(),FILE_APPEND,LOCK_EXvefgetcsv(). - PHP PDO ile veritabanı bağlantısı: SQLite örnekli PDO bağlantısı,
prepare()veexecute(),bindValue(), getirme (fetch) modları, transaction ve hata modu. - PHP password_hash ile şifre saklama:
password_hash(),password_verify(),password_needs_rehash(), algoritma sabitleri verandom_bytes(). - PHP filter_var ile veri doğrulama:
FILTER_VALIDATE_*filtreleriyle sayı, e-posta, URL, IP ve mantıksal değer doğrulama, seçenekler vehtmlspecialchars()ile çıktıyı kaçırma. - PHP CLI komut satırı kullanımı:
php dosya.php,-r,-l,-a, yalnızca geliştirme için yerleşik sunucu-S,$argv/$argcveSTDIN/STDOUT. - PHP SPL veri yapıları:
SplStack,SplQueue,SplObjectStorage,SplPriorityQueue,SplFixedArray,ArrayObjectveArrayIterator.
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
newzincirleme,array_find(),mb_trim()ve diğer 8.4 değişiklikleri. - PHP 8.5 yenilikleri: Pipe operatörü
|>, özellik değiştirerekclone(),#[\NoDiscard],array_first()vearray_last(), URI eklentisi ve diğer 8.5 yenilikleri. - PHP 8.4 deprecated uyarıları: Örtük nullable parametre tipi,
E_STRICTve 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(),??vearray_key_exists()ile çözüm. - PHP TypeError ve ArgumentCountError:
TypeError,ArgumentCountError,ValueErrorveDivisionByZeroErrormesajları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