Çalıştırılabilir örneklerle PHP dersleri
Ücretsiz bir PHP 8 eğitimi ve başvuru kaynağı: diziler, foreach, metin fonksiyonları, tarihler, formlar, sınıflar ve hatalar. Her örnek sayfada çalışır; HTML yazdıran örnekler sayfayı, gönderebileceğin formlarla birlikte gösterir.
Rehberli bir PHP yolculuğuna başlaBaşlarken
- PHP Nedir?PHP sunucu tarafında çalışan bir betik dilidir: PHP dosyası web sunucusunda çalışır ve oluşturduğu HTML'i tarayıcıya gönderir. WordPress, Laravel ve web'in büyük bir kısmı PHP ile çalışır; komut satırından betik çalıştırmak için de kullanılır.
- PHP KurulumuPHP'yi tek komutla kurun: Windows'ta winget, macOS'ta Homebrew, Linux'ta apt veya dnf. Ardından çalıştığını ve hangi sürüme sahip olduğunuzu görmek için terminalde php -v çalıştırın.
- PHP ÇalıştırmaBir PHP dosyasını terminalden php index.php ile çalıştırın ya da bir klasörü PHP'nin yerleşik sunucusuyla tarayıcıda açın: php -S localhost:8000. İkisi için de Apache veya XAMPP gerekmez.
- echo ve printecho bir veya daha fazla string yazdırır: echo "Hello, $name"; ya da echo $a, $b;. Sayfaya metin veya HTML göndermenin olağan yoludur. print aynı işi tek bir değerle yapar ve 1 döndürür; <?= $x ?> ise HTML içindeki kısa yazımdır.
- Hata RaporlamaTüm PHP hatalarını göstermek için betiğin en başına ini_set('display_errors', '1'); ve error_reporting(E_ALL); yazın ya da php.ini içinde display_errors = On ve error_reporting = E_ALL ayarlayın. Canlı ortamda hataları göstermek yerine loglayın.
- PHP vs PythonPHP web için yapılmıştır: her istekte bir dosya çalışır ve bir sayfa yazdırır; WordPress ve Laravel onunla çalışır. Python ise genel amaçlı bir dildir; web işi de yapar (Django, Flask), veri bilimi, otomasyon ve makine öğreniminde ise baskındır.
- PHP vs JavaScriptPHP sunucuda çalışır ve tarayıcıya hazır HTML gönderir. JavaScript tarayıcıda çalışır ve sayfayı yüklendikten sonra değiştirir; Node.js ile sunucuda da çalışır. Çoğu web sitesi ikisini de kullanır: sayfalar ve API'ler için PHP, etkileşim için JavaScript.
Temeller
- DeğişkenlerBir PHP değişkeni $ ile başlar ve ona değer atanarak oluşturulur: $name = "Ada";. Tanımlama anahtar kelimesi ve sabit bir tür yoktur. Fonksiyonlar, siz içeri geçirmedikçe, global kullanmadıkça ya da yakalamadıkça dışarıdaki değişkenleri görmez; static ise bir değeri çağrılar arasında korur.
- Veri TipleriPHP'nin on türü vardır: dört skaler (int, float, string, bool), dört bileşik tür (array, object, callable, iterable) ve iki özel tür (null, resource). var_dump($x) bir değerin türünü ve değerini gösterir, gettype($x) tür adını döndürür.
- StringlerPHP stringlerini nokta operatörüyle birleştirin ("Hello, " . $name) ya da değişkenleri doğrudan çift tırnağın içine yazın ("Hello, $name"). Tek tırnak metni yazıldığı gibi yazdırır. Birleştirme, .=, dizi ve nesnelerin interpolasyonu ve strtoupper, strtolower, ucfirst, ucwords ile büyük/küçük harf değiştirme.
- Heredoc ve NowdocPHP heredoc, <<<EOT ile başlayıp EOT ile biten çok satırlı bir stringdir; çift tırnaklı bir string gibi değişkenleri değiştirir. Nowdoc, yani <<<'EOT', metni tam yazıldığı gibi tutar. Sözdizimi, girinti kuralları, dizi ve nesne interpolasyonu ve HTML şablonları.
- OperatörlerPHP operatörleri değerler üzerinde çalışır: aritmetik için +, -, *, /, %, **; atama için =, +=, .=, ??=; mantık için &&, ||, ! ve xor; string birleştirme için .; karşılaştırma için ==, ===, <=>; artırma için ++, --. Her grubu çalıştırılabilir örneklerle ve and ile && öncelik tuzağıyla öğrenin.
- Karşılaştırma OperatörleriPHP değerleri == (tür dönüşümünden sonra eşit), === (eşit değer ve aynı tür), != ve !==, < > <= >= ve spaceship operatörü <=> ile karşılaştırır. == operatörünün türleri ne zaman dönüştürdüğünü, PHP 8'de neyin değiştiğini öğrenin ve tüm gevşek ve katı karşılaştırmaları tek tabloda görün.
- Ternary OperatörüPHP ternary (üçlü) operatörü tek satırlık bir if/else'tir: $result = $condition ? 'yes' : 'no';. Kısa ternary ?: (Elvis operatörü), bunun ?? operatöründen farkı, iç içe ternary'lerin PHP 8'den beri neden parantez gerektirdiği ve match'in ne zaman daha temiz bir seçim olduğu.
- Null Birleştirme ??PHP null birleştirme operatörü, null veya atanmamış olmadıkça sol tarafını döndürür: $name = $_GET['name'] ?? 'Guest';. Eksik bir değişken veya dizi anahtarı için asla uyarı vermez. ?? zincirleri, ??= ataması, ?? ile ?: farkı ve nullsafe operatörü ?->.
- Tür DönüştürmeBir PHP stringini (int) $str veya intval($str) ile tam sayıya çevirin; (int) "42" sonucu 42, (int) "12abc" sonucu 12 olur. int, float, bool, string ve array'e dönüştürme, sayısal stringler, tabanlı intval, settype ve sessizce 0 almak yerine girdiyi doğrulama.
- SabitlerBir PHP sabiti, değişemeyen bir değere verilen addır: const MAX_USERS = 100; ya da define('MAX_USERS', 100);. define ile const farkı, sabit diziler, self:: ile sınıf sabitleri, defined() ile kontrol ve __LINE__, __FILE__, __DIR__, __CLASS__ sihirli sabitleri.
- isset()isset($var), bir değişken var ve null değilse true, değilse false döndürür ve hiçbir uyarı vermez. Dizi anahtarlarını ve nesne özelliklerini de kontrol eder: isset($user['email']). Birden çok değişkenle isset, iç içe anahtarlar, isset ile empty, isset ile array_key_exists ve form gönderimlerini kontrol etme.
- empty()empty($var), bir değişken eksik veya falsy olduğunda true döndürür: null, false, 0, 0.0, "", "0" veya []. Tanımsız değişkenler veya anahtarlar için asla uyarı vermez. "0" değerinin neden boş sayıldığı, boş string ve diziyi tam olarak kontrol etme, empty ile isset ve form girdisini doğrulama.
- Matematik ve Yuvarlamaround($x, 2) iki ondalık basamağa yuvarlar, floor() her zaman aşağı, ceil() her zaman yukarı yuvarlar. Ayrıca intdiv(), % operatörü, kuvvet için **, abs(), max(), min() ve rastgele sayılar için random_int().
Akış kontrolü
- if, elseif, elseif (condition) { ... } bir bloğu yalnızca koşul true olduğunda çalıştırır, elseif sonraki koşulu kontrol eder, else ise hiçbiri eşleşmediğinde çalışır. elseif ile else if farkı, && ve ||, truthy değerler ve HTML şablonları için if: endif; sözdizimi.
- switch caseswitch ($value) tek bir değeri bir case etiketleri listesiyle karşılaştırır ve kodu ilk eşleşmeden bir break ifadesine kadar çalıştırır. Birden çok case, fallthrough, default, switch(true) ve switch'in neden gevşek == karşılaştırması kullandığı.
- match İfadesimatch ($x) { 1, 2 => 'low', default => 'other' } bir değeri katı === ile karşılaştırır, eşleşen ilk kolun sonucunu döndürür ve hiçbir şey eşleşmezse UnhandledMatchError fırlatır. match ile switch farkı, match(true) ve enum ile match.
- for Döngüsüfor ($i = 0; $i < 10; $i++) { ... } bir bloğu belirli sayıda çalıştırır: başlangıç değeri, her turdan önce kontrol edilen koşul ve bir adım. Bir dizide indeksle dolaşma, geriye sayma, iç içe döngüler, break ve continue.
- while Döngüsüwhile (condition) { ... } koşul true olduğu sürece bir bloğu tekrarlar ve koşulu her turdan önce kontrol eder. do { ... } while (condition); koşulu sonra kontrol eder, bu yüzden her zaman en az bir kez çalışır. break ile while (true), dosyayı satır satır okuma ve sonsuz döngülerden kaçınma.
- foreach Döngüsüforeach ($array as $value) bir dizinin her elemanını ziyaret eder, foreach ($array as $key => $value) ise anahtarı da verir. İndeksi alma, değerleri referansla değiştirme ve unset() tuzağı, break ve continue, iç içe diziler, foreach içinde list() ve HTML oluşturma.
Diziler
- DizilerPHP dizisi, her biri bir anahtar altında saklanan sıralı bir değer listesidir: $fruits = ['apple', 'banana']; $fruits[0] olarak okunur. Dizi oluşturmayı, elemanları okuyup değiştirmeyi, üzerlerinde dolaşmayı, yazdırmayı ve hangi dizi fonksiyonunu kullanacağınızı öğrenin.
- İlişkisel DizilerPHP ilişkisel dizisi değerleri sizin adlandırdığınız anahtarlar altında saklar: $user = ['name' => 'Ada', 'age' => 36]; $user['name'] olarak okunur. Çift eklemeyi, değiştirmeyi ve silmeyi, anahtarlar ve değerler üzerinde dolaşmayı, tüm anahtarları veya değerleri almayı, bir anahtarı kontrol etmeyi ve anahtara ya da değere göre sıralamayı öğrenin.
- Çok Boyutlu DizilerPHP'de çok boyutlu dizi, elemanları dizi olan bir dizidir ve her seviye için bir köşeli parantezle okunur: $grid[1][2] veya $users[0]['name']. İç içe dizi oluşturmayı, derindeki değerleri okuyup değiştirmeyi, iç içe foreach ile dolaşmayı, HTML tablo oluşturmayı, bir sütunu çıkarmayı ve satırları sıralamayı öğrenin.
- array_push()array_push($arr, $value) bir dizinin sonuna bir veya daha fazla değer ekler; $arr[] = $value tek bir değer için aynı işi yapar ve daha hızlıdır. Bir dizinin sonuna, başına veya ortasına eleman eklemeyi, anahtar ve değer eklemeyi ve klasik dönüş değeri hatasından kaçınmayı öğrenin.
- count()count($arr) bir PHP dizisindeki eleman sayısını döndürür, yani count(['a', 'b', 'c']) 3'tür. İç içe dizileri COUNT_RECURSIVE ile saymayı, sizeof() ile count() ilişkisini, eşleşen değerleri saymayı ve count(null) ifadesinin PHP 8'den beri neden TypeError fırlattığını öğrenin.
- in_array()in_array($needle, $haystack) değer dizideyse true döndürür. Türlerin de eşleşmesi için katı kontrolde üçüncü argüman olarak true verin: in_array('1', $ids, true). Katı parametreyi, büyük küçük harf duyarsız aramayı, birden çok değeri kontrol etmeyi, iç içe dizileri ve hızlı isset alternatifini öğrenin.
- array_search()array_search($value, $array) $value değerine eşit ilk elemanın anahtarını, yoksa false döndürür. Anahtar 0 olabileceği için sonucu her zaman !== false ile test edin. Katı aramayı, tüm eşleşmeleri bulmayı, array_column ile çok boyutlu dizide aramayı ve büyük küçük harf duyarsız aramayı öğrenin.
- array_key_exists()array_key_exists('key', $array) dizide o anahtar varsa, değeri null olsa bile true döndürür. isset($array['key']) daha hızlıdır ama null bir değer için false döndürür. Farkı, key_exists() fonksiyonunu, iç içe anahtarları, birkaç anahtarı kontrol etmeyi ve nesnelerin neden property_exists() gerektirdiğini öğrenin.
- array_merge()array_merge($a, $b) dizileri tek bir dizide birleştirir: sayısal anahtarlı değerler sona eklenip yeniden numaralanır, dizge anahtarlarda ise sonraki dizi kazanır. array_merge fonksiyonunun + operatöründen ve [...$a, ...$b] açma söz diziminden farkını, bir dizi listesini birleştirmeyi ve array_merge_recursive ya da array_replace ne zaman daha uygun olduğunu öğrenin.
- array_map()array_map($callback, $array) geri çağırma fonksiyonunu her elemanda çalıştırır ve sonuçlardan oluşan yeni bir dizi döndürür. Ok fonksiyonlarını, anahtarları, aynı anda birkaç diziyi eşlemeyi ve array_walk ya da foreach ne zaman daha uygun olduğunu öğrenin.
- array_filter()array_filter($array, $callback) geri çağırma fonksiyonunun true döndürdüğü elemanları tutar. Boş değerleri kaldırmayı, ARRAY_FILTER_USE_KEY ile anahtara göre süzmeyi, sonucu array_values ile yeniden indekslemeyi ve array_reduce ile toplamayı öğrenin.
- Dizi Sıralamasort($array) bir listeyi yerinde sıralar, asort ve ksort ilişkisel bir diziyi değere veya anahtara göre sıralar, usort ise kendi karşılaştırmanızla sıralar. Hepsini öğrenin, çok boyutlu bir diziyi bir sütuna göre sıralayın ve klasik $sorted = sort($arr) hatasından kaçının.
- Diziden Silmeunset($array[$key]) bir elemanı anahtara göre siler, array_splice konuma göre siler ve yeniden numaralar, array_diff ise değere göre siler. Her birini, sonrasında yeniden indekslemeyi ve yanlış elemanı silen array_search tuzağını öğrenin.
- array_slice()array_slice($array, $offset, $length) orijinali değiştirmeden bir dizinin bir parçasının kopyasını döndürür. Son elemanlar için negatif başlangıcı, preserve_keys parametresini, bir listede sayfalamayı ve array_splice ile farkını öğrenin.
- array_unique()array_unique($array) tekrarlanan değerleri kaldırır ve her birinin ilk geçişini orijinal anahtarıyla tutar. Sonucu yeniden indekslemeyi, büyük küçük harfi yok sayarak tekrarları kaldırmayı, çok boyutlu bir diziyi benzersiz yapmayı ve tekrarları saymayı veya bulmayı öğrenin.
- array_column()array_column($rows, 'email') her satırın email alanını düz bir dizi olarak döndürür. İndeks anahtarı argümanını, satırları id'ye göre yeniden indekslemeyi, nesnelerle kullanımı ve array_search ile bir satırı bulmayı öğrenin.
- Ayrıştırma ve list()[$a, $b] = $array ilk iki elemanı tek satırda $a ve $b değişkenlerine atar, ['name' => $name] = $user ise aynısını anahtara göre yapar. list() eski yazımdır. Eleman atlama, değişkenleri yer değiştirme, birden çok dönüş değeri, foreach içinde ayrıştırma ve ... açma operatörü.
Metinler (string)
- explode()explode(',', $string) bir dizgeyi her virgülde böler ve parçaları bir dizi olarak döndürür. limit parametresini, yeni satıra göre bölmeyi, parçaları kırpmayı ve str_split ya da preg_split ne zaman daha iyi araç olduğunu öğrenin.
- implode()implode(', ', $array) bir dizinin değerlerini aralarına bir ayırıcı koyarak tek bir dizgede birleştirir. Anahtarlarla implode, ilişkisel diziler, HTML listeleri oluşturma ve implode ile join arasındaki farkı öğrenin.
- str_replace()str_replace($search, $replace, $subject) $search değerinin her geçişini $replace ile değiştirir. Arama ve değiştirme değerleri için dizileri, değişiklikleri saymayı, büyük küçük harfe duyarsız str_ireplace fonksiyonunu ve yalnızca ilk geçişi değiştirmeyi öğrenin.
- substr()substr($string, $offset, $length) bir dizgenin bir parçasını döndürür. Negatif başlangıçları, ilk veya son karakterleri almayı, Japonca ve diğer UTF-8 metinler için mb_substr fonksiyonunu, substr_count ve metni üç noktayla kısaltmayı öğrenin.
- strpos()strpos($haystack, $needle) $needle değerinin ilk geçişinin konumunu, bulunamazsa false döndürür. !== false kontrolünü, büyük küçük harfe duyarsız stripos fonksiyonunu, strrpos ile son eşleşmeyi ve her geçişi bulmayı öğrenin.
- str_contains()str_contains($haystack, $needle) $needle değeri $haystack içinde herhangi bir yerde geçiyorsa true döndürür. Büyük küçük harfe duyarsız sürümü, str_starts_with ve str_ends_with fonksiyonlarını, birkaç kelimeyi kontrol etmeyi ve PHP 7 için strpos sürümünü öğrenin.
- trim()trim($string) bir dizgenin iki ucundan boşlukları, sekmeleri ve yeni satırları siler; ltrim() ve rtrim() tek tarafı temizler. Belirli karakterleri, Japonca tam genişlikte boşluğu ve bir dizideki her değeri kırpmayı öğrenin.
- strlen()strlen($string) bir dizgenin uzunluğunu bayt olarak, mb_strlen($string) ise karakter olarak döndürür. Japonca metin ve emojinin neden farklı yanıtlar verdiğini, boş bir dizgeyi nasıl kontrol edeceğinizi ve girdi uzunluğunu nasıl doğrulayacağınızı öğrenin.
- sprintf()sprintf() bir biçimden ve değerlerden bir dizge oluşturur: sprintf('%05.2f', 3.14159) "03.14" döndürür. %s, %d ve %f, sıfırla doldurma, sabit ondalıklar, hizalama, argüman numaralandırma, printf ve vsprintf.
- number_format()number_format(1234567.891, 2) "1,234,567.89" döndürür: verilen ondalık sayısına yuvarlar ve bir binlik ayırıcı ekler. Dört parametreyi, Avrupa ve Japon biçimlerini, nasıl yuvarladığını ve sonucun neden bir dizge olduğunu öğrenin.
- Yeni SatırPHP'de yeni bir satır yazdırmak için çift tırnak içinde "\n" yazın veya PHP_EOL kullanın. Bir web sayfasında yeni satır görünmez, bu yüzden <br> veya nl2br() kullanın. Farkı, tek tırnak içinde '\n' ifadesinin neden çalışmadığını ve satır sonlarını bölmeyi veya silmeyi öğrenin.
- preg_match()preg_match($pattern, $subject, $matches) bir dizgeyi bir düzenli ifadeyle test eder ve eşleşme için 1, eşleşme yoksa 0 döndürür. Yakalama gruplarını, adlandırılmış grupları, preg_match_all, çapaları, doğrulama kalıplarını ve UTF-8 ile Japonca metin için u değiştiricisini öğrenin.
- preg_replace()preg_replace($pattern, $replacement, $subject) bir düzenli ifadenin her eşleşmesini değiştirir: preg_replace('/\s+/', ' ', $text) boşlukları tek boşluğa indirir. $1 gibi geri referansları, preg_replace_callback fonksiyonunu, alfanümerik olmayan karakterleri silmeyi, limitleri ve sayımları öğrenin.
Fonksiyonlar
- FonksiyonlarBir PHP fonksiyonunu function name($param) { return $value; } ile tanımlayın. Dönüş değerlerini, varsayılan parametreleri, adlandırılmış argümanları, referansla aktarmayı, strict_types ile tür bildirimlerini, nullable ve union türleri ve değişken sayıda ...$args argümanını öğrenin.
- Ok FonksiyonlarıOk fonksiyonu, fn($x) => $x * 2 şeklinde yazılan tek ifadelik bir anonim fonksiyondur. Dış değişkenleri use olmadan, otomatik olarak ve değerle kullanır. Söz dizimini, yakalamanın nasıl çalıştığını, türleri, array_map ve usort için geri çağırmaları ve ne zaman tam bir closure kullanmanız gerektiğini öğrenin.
- Anonim FonksiyonlarAnonim fonksiyon (closure), bir değişkende saklanan adsız bir fonksiyondur: $greet = function ($name) { return "Hi $name"; };. use anahtar kelimesini, referansla yakalamayı, callable değerleri, strlen(...) birinci sınıf çağrılabilir söz dizimini ve sınıf içindeki closure'ları öğrenin.
- Generator'larGenerator, değerleri yield ile birer birer geri veren bir fonksiyondur; böylece foreach bir dizi oluşturmadan bir milyon öğe üzerinde dolaşabilir. yield, anahtarlar, bellek tasarrufu, sonsuz diziler, yield from, send() ve getReturn() konularını öğrenin.
Sınıflar ve nesneler
- Sınıflar ve NesnelerPHP sınıfı `class Name { }` ile tanımlanan bir şablondur ve `new Name()` ondan bir nesne oluşturur. Özellikleri, metotları, `$this` değişkenini, public/private/protected, türlü ve readonly özellikleri, `__toString` metodunu ve bir nesneyi atamanın onu neden kopyalamadığını öğrenin.
- Yapıcı MetotlarPHP yapıcısı, `new ClassName(...)` yazdığınızda otomatik olarak çalışan `__construct()` metodudur. Yapıcı özellik yükseltmeyi (property promotion), varsayılan ve adlandırılmış argümanları, doğrulamayı, `parent::__construct()` çağrısını ve statik fabrika metotlarıyla birden çok yapıcıyı nasıl taklit edeceğinizi öğrenin.
- KalıtımPHP'de bir sınıf `class Dog extends Animal` ile başka bir sınıftan kalıtım alır: üst sınıfın public ve protected özelliklerini ve metotlarını alır, onları ezebilir (override) ve orijinali yine `parent::method()` ile çağırabilir. Metot ezmeyi, protected, final, instanceof ve private metot tuzağını öğrenin.
- ArayüzlerBir PHP arayüzü bir sınıfın sahip olmayı vaat ettiği metotları listeler: `interface Shape { public function area(): float; }`; `class Circle implements Shape` ardından `area()` metodunu tanımlamak zorundadır. Arayüzlerle tür ipuçlarını, birkaç arayüz uygulamayı, arayüz sabitlerini, arayüzleri genişletmeyi, Countable gibi yerleşik arayüzleri ve arayüz ile soyut sınıf farkını öğrenin.
- Soyut SınıflarBir PHP soyut sınıfı `abstract class Name` ile tanımlanır ve örneklenemez: genişletilmek için vardır. Özellikler, bir yapıcı ve tamamlanmış metotların yanında, her alt sınıfın uygulaması gereken gövdesiz `abstract` metotlar tutabilir.
- Trait'lerPHP trait'i, `use TraitName;` ile bir sınıfa kopyaladığınız yeniden kullanılabilir bir metot ve özellik bloğudur. Birkaç trait kullanmayı, ad çakışmalarını `insteadof` ve `as` ile çözmeyi, soyut ve statik trait üyelerini, hangi metodun kazandığını ve trait, arayüz ve soyut sınıf farkını öğrenin.
- Enum'larPHP enum'u (8.1+), sabit bir değer listesine sahip bir türdür: `enum Status: string { case Active = 'active'; }`. Saf ve değerli (backed) enum'ları, `->value` ve `->name` özelliklerini, `from()` ve `tryFrom()` ile dönüştürmeyi, `cases()` ile case'leri listelemeyi, metotları, sabitleri, arayüzleri ve `match` içinde enum'ları öğrenin.
- Statik MetotlarBir `static` metot veya özellik bir nesneye değil sınıfa aittir: onu `ClassName::method()` ile çağırır ve `ClassName::$count` ile okursunuz, `new` gerekmez. `self::` ile `static::` farkını (geç statik bağlama), `new static` ifadesini, fonksiyon içindeki statik değişkenleri ve static'in ne zaman yanlış araç olduğunu öğrenin.
- İsim AlanlarıBir PHP isim alanı sınıfları, fonksiyonları ve sabitleri bir önek altında gruplar: bir dosyanın başında `namespace App\Models;`, sonra başka yerlerde sınıfa kısa adıyla başvurmak için `use App\Models\User;`. Tam nitelikli adları, `use ... as` takma adlarını, `use function` ifadesini, global sınıflar için baştaki ters eğik çizgiyi ve PSR-4 otomatik yüklemeyi öğrenin.
Hatalar ve istisnalar
- try catchPHP'de başarısız olabilecek kod bir `try { }` bloğuna girer ve hata fırlatırsa `catch (Exception $e) { }` çalışır; neden `$e->getMessage()` içindedir. Birkaç istisna türünü yakalamayı, `finally` bloğunu, `catch (Exception)` ifadesinin neden `TypeError` ve `DivisionByZeroError` hatalarını kaçırdığını (`Throwable` yakalayın), yeniden fırlatmayı ve global bir işleyiciyi öğrenin.
- İstisnalarPHP'de bir istisnayı `throw new Exception('message');` ile fırlatırsınız ve çağıran onu bir `catch` bloğunda `$e->getMessage()` ile okur. Yerleşik istisna sınıflarını, özel istisnalar yazmayı, `getCode()`, `getLine()` ve `getPrevious()` metotlarını, bir ifade olarak `throw` kullanımını ve PHP'nin kendisinin fırlattığı `ValueError` ve `TypeError` gibi hataları öğrenin.
Veri, dosyalar ve web
- json_encode()json_encode($value) bir PHP dizisini, nesnesini veya skaler değerini bir JSON dizgesine çevirir. İlişkisel diziler JSON nesnesi, listeler JSON dizisi olur ve JSON_PRETTY_PRINT ile JSON_UNESCAPED_UNICODE gibi bayraklar çıktıyı kontrol eder.
- json_decode()json_decode($json, true) bir JSON dizgesini PHP ilişkisel dizisine çevirir; true olmadan stdClass nesneleri alırsınız. İç içe değerleri, JSON_THROW_ON_ERROR ile hata yönetimini, json_validate() fonksiyonunu ve json_decode'un neden null döndürdüğünü öğrenin.
- date()date('Y-m-d') bugünün tarihini bir dizge olarak döndürür, date('Y-m-d', $timestamp) ise herhangi bir Unix zaman damgasını biçimlendirir. time(), mktime(), strtotime(), DateTimeImmutable, gün eklemeyi, iki tarih arasındaki farkı ve saat dilimlerini çalıştırabileceğiniz örneklerle öğrenin.
- Tarih FormatıBir PHP tarih formatı 'Y-m-d H:i:s' gibi harflerden oluşan bir dizgedir; Y 4 basamaklı yıl, m ay, d gün, H saat, i dakika ve s saniyedir. Burada her biçim karakteri bir örnekle birlikte, ayrıca kaçışlama, ISO 8601, Japonca tarihler ve bir biçimi diğerine dönüştürme var.
- file_get_contents()file_get_contents('notes.txt') bütün bir dosyayı okur ve tek bir dizge olarak, okuyamazsa false döndürür. Eşi file_put_contents() bir dizgeyi bir dosyaya yazar, file() ise satırları bir dizi olarak döndürür.
- fopen()fopen('data.txt', 'r') bir dosyayı açar ve bir tanıtıcı, başarısızlıkta false döndürür. Tanıtıcıdan fgets() veya fread() ile okuyun, fwrite() ile yazın, fclose() ile kapatın. Mod ('r', 'w', 'a', 'x', 'c' ve + biçimleri) ne yapabileceğinize karar verir.
- include ve requireinclude 'header.php'; başka bir PHP dosyasını o noktada, sanki kodu oraya yapıştırılmış gibi çalıştırır. require aynısını yapar ama dosya eksik olduğunda betiği ölümcül bir hatayla durdurur, include ise yalnızca uyarır ve devam eder. include_once ve require_once bir dosyayı yalnızca ilk seferde yükler.
- FormlarBir PHP formu <form method="post"> ile kendisine gönderilir ve betik, $_SERVER['REQUEST_METHOD'] 'POST' olduğunda alanları $_POST['name'] üzerinden okur. Doğrulamayı, alanların yanında hata mesajlarını, girilen değerleri korumayı, onay kutularını ve seçim listelerini ve çıktıyı kaçışlamayı öğrenin.
- $_GET ve $_POST$_GET URL'nin sorgu dizgesini tutar (?page=2 $_GET['page'] verir), $_POST ise method="post" ile gönderilen bir formun alanlarını tutar. İkisini güvenle okumayı, http_build_query ile bağlantı oluşturmayı, $_SERVER['REQUEST_METHOD'] kontrolünü ve GET ile POST arasında seçim yapmayı öğrenin.
- htmlspecialchars()htmlspecialchars($text) HTML'de anlam taşıyan beş karakteri (& < > " ') varlıklara çevirir, böylece kullanıcı girdisi işaretleme olarak çalışmak yerine metin olarak gösterilir. ENT_QUOTES, özniteliklerde kaçışlama, çift kodlama, htmlentities ve strip_tags konularını öğrenin.
- Oturumlar ve ÇerezlerHer sayfanın başında session_start() çağırın, sonra değerleri $_SESSION['key'] içinde saklayın; PHP onları sunucuda tutar ve ziyaretçiyi bir çerez üzerinden hatırlar. setcookie('name', 'value', $options) tarayıcıda küçük bir değer saklar ve $_COOKIE üzerinden geri okunur. Giriş, çıkış, flash mesajları, çerez seçeneklerini ve güvenlik ayarlarını öğrenin.
- password_hash()Bir parolayı password_hash($password, PASSWORD_DEFAULT) ile hash'leyin, 60 karakterlik sonucu saklayın ve bir girişi password_verify($password, $hash) ile kontrol edin. Hash'in neden her seferinde değiştiğini, maliyeti, password_needs_rehash, Argon2id ve md5 ile sha1'in parolalar için neden yanlış olduğunu öğrenin.
- filter_var()filter_var($value, FILTER_VALIDATE_EMAIL) değer geçerliyse değeri, değilse false döndürür; FILTER_VALIDATE_INT, FILTER_VALIDATE_URL, FILTER_VALIDATE_BOOL ve FILTER_VALIDATE_IP aynı şekilde çalışır. Seçenekleri (min_range, default), bayrakları, temizleme filtrelerini ve false ile 0 tuzağını öğrenin.
- PDOPDO, PHP'nin veritabanı katmanıdır: new PDO('mysql:host=localhost;dbname=shop;charset=utf8mb4', $user, $pass) ile bağlanın, sonra değer içeren her sorguyu prepare() ve execute([$value]) üzerinden çalıştırın. Bağlanmayı, hazırlanmış ifadeleri, satır getirmeyi, eklemeleri, işlemleri (transaction) ve WHERE IN kullanımını öğrenin.
- ComposerComposer PHP'nin paket yöneticisidir: composer require vendor/package bir kütüphaneyi vendor/ içine indirir, composer.json içine kaydeder ve require 'vendor/autoload.php' onu yükler. Composer kurulumunu, composer.json dosyasını, sürüm kısıtlarını, install ile update farkını ve kendi sınıflarınız için PSR-4 otomatik yüklemeyi öğrenin.
Hata ayıklama ve pratik
- var_dump() ve print_r()print_r($array) bir diziyi okunur biçimde yazdırır, var_dump($value) her türü ve uzunluğu da gösterir, var_export ise geçerli PHP kodu yazdırır. Hangisini ne zaman kullanacağınızı, print_r çıktısını bir dizge olarak almayı ve <pre> ile HTML'de okunur yazdırmayı öğrenin.
- Mülakat SorularıPHP 8 için kısa ve doğru yanıtlarıyla 24 PHP mülakat sorusu: == ile === ve isset ile empty farkından foreach içindeki referanslara, self ile static farkına, generator'lara, SQL injection'a ve parola hash'lemeye kadar. Yanıtların çoğunda çalıştırıp değiştirebileceğiniz kod var.