guclusat

Tanınmış Üye
Süper Moderatör

Web Programlamanın Güçlü Silahı: PHP ve Temel Dil Yapısı

Rasmus Lerdorf tarafından ilk etapta kendi kişisel web sayfalarını yönetmek amacıyla geliştirilen ve açılımı "Personal Home Pages" (Kişisel Ana Sayfalar) olan PHP, günümüzde Hypertext Preprocessor olarak anılan, HTML içerisine gömülebilen (HTML-embedded) güçlü bir sunucu taraflı script dilidir. Özellikle dinamik ve "on the fly" (anlık/havada) üretilen web sayfalarını hızlı bir şekilde geliştirmek isteyen yazılımcılar için biçilmiş kaftandır.
PHP'nin sentaksı (sözdizimi) geliştirilirken C, Java ve en çok da Perl dillerinden esinlenilmiştir. Bu dillerden herhangi birine aşinalığı olan bir geliştiricinin PHP'ye adapte olması son derece kolaydır.

PHP Nasıl Çalışır?

PHP, kendi yorumlayıcısı ile birlikte çalışan bir dildir. Süreç şu şekilde işler:
  1. Kullanıcı tarayıcıdan bir sayfa talep eder.
  2. Web sunucusu, HTML kodları arasına yerleştirilmiş PHP kodlarını ayrıştırıp sunucuda işler.
  3. İşlem bittikten sonra kullanıcıya sadece saf HTML formatında bir çıktı gönderilir. Kullanıcı kaynak koduna baktığında arka plandaki PHP kodlarını asla göremez.

1. PHP Dilinin Yapısı ve Giriş Yöntemleri

PHP, HTML kodlarıyla aynı dosya içinde harmanlanarak kullanılabilir. Kod bloğunda HTML'den PHP'ye geçiş yapabilmek için belirli ayıraçlar (taglar) kullanılır.
Giriş YöntemiKod ÖrneğiAçıklama
Standart PHP Etiketi<?php ... ?>En güvenli ve modern standart yöntemdir.
Kısa Etiket (Short Tag)<? ... ?>Sunucu konfigürasyonunda (short_open_tag) açık olmalıdır.
Script Etiketi<script language="php"> ... </script>Eski PHP versiyonlarında kalmıştır, modern PHP'de kullanılmaz.

Örnek Tablo İçi Kullanım:

HTML
Kod:
<table size="500">
    <tr>
        <td><?php echo "Buraya PHP kodu yazılacak"; ?></td>
    </tr>
</table>

İlk "Hello World" (Merhaba Dünya) Uygulamamız:

HTML
Kod:
<html>
<head>
    <title>PHP İlk Uygulama - Example</title>
</head>
<body>
    <?php echo "Hello World..."; ?>
</body>
</html>
Tarayıcı (Browser) Çıktısı:

2. Değişkenler ve Gelişmiş Değişken Özellikleri

PHP'de değişkenler, değer ile atama (assign by value) metoduyla çalışabildiği gibi adres ile atama (assign by reference) metodunu da destekler.
  • Referans Atama (&): İşaretin önüne geldiği değişkenin değerini kopyalamaz; o değişkenin bellekteki adresini işleme dahil eder.

Değişken Tipleri ve Esneklik (Type Juggling & Casting)

ÖzellikTanımÖrnek
Type JugglingÇalışma anında değişken tipinin otomatik değişebilmesidir.$sayi = "5"; (String) -> $sayi = $sayi + 2; (Integer olur)
Type CastingDeğişken değerinin bizim istediğimiz tipe zorlanmasıdır.$yeni_veri = (int)$eski_veri;

Dinamik Değişkenler (Variable Variables)

Adı dinamik olarak değişebilen değişkenler, programlamada muazzam bir esneklik sağlar. Karmaşık recursive (öz yinelemeli) yapıların önüne geçebilir.
PHP
Kod:
$a = "hello";
$$a = "world"; // $hello değişkeni oluşturulur ve değeri "world" olur.
echo "$a ${$a}"; // Çıktı: hello world

3. Veri Akışı ve Önceden Tanımlı Değişkenler

Önceden Tanımlı (Global) Değişkenler

PHP, programcıya hazır küresel değişkenler sunar. Bunlar, sunucunun çevre değişkenleri, CGI değişkenleri ve HTTP istek detaylarıdır (Örn: $_SERVER, $_ENV). Bunların tam listesi phpinfo(); fonksiyonu ile görüntülenebilir. PHP'nin çalışma moduna göre (Modül veya CGI) bu değişkenlerin içeriği değişiklik gösterebilir.

Kullanıcıdan Betiğe Gelen Değişkenler

PHP'nin en güçlü yönlerinden biri, formlardan veya URL'den gelen verileri ek bir parse (çözümleme) işlemine gerek duymadan doğrudan alabilmesidir.
HTML Form Katı (form.html):
HTML
Kod:
<form action="islem.php" method="post">
    Adınız: <input type="text" name="username"><br>
    <input type="submit" name="submit" value="Tamam">
</form>
PHP İşleme Katı (islem.php):
PHP
Kod:
// Modern PHP standartlarında dışarıdan gelen POST verileri $_POST süper globali ile alınır:
$name = htmlspecialchars($_POST['username']); 
echo "Adınız: " . $name;

4. Diziler (Arrays) ve Fonksiyonlar

PHP'de Dizilerin Yetenekleri

  • Erişim Modelleri: Dizilere rastgele (random) erişim sağlanabildiği gibi sıradan (sequential) erişim ve kuyruk (queue) veri yapıları şeklinde de kullanılabilir.
  • İlişkili (Associative) Diziler: Perl dilinde olduğu gibi anahtar-değer (key => value) eşleşmeli diziler tanımlanabilir. Bu diziler üzerinde sırayla dönmek için list(), each() veya modern foreach() döngüleri kullanılır.
  • Dinamik Büyüme: Diziler çalışma anında dinamik olarak büyüyebilir ve indeks boyutları değiştirilebilir.
Uyadı: Büyük verilerle çalışırken bellek limitlerine dikkat edilmelidir; kontrolsüz döngüler sunucu kaynaklarını tüketebilir.

Fonksiyonların Gelişmiş Özellikleri

Fonksiyon ÖzelliğiAçıklama
Recursive CallsFonksiyonların kendi kendilerini çağırması desteklenir.
Variable FunctionsAdı dinamik olarak değişen fonksiyonlar çalıştırılabilir.
Static DeğişkenlerFonksiyon bittikten sonra bile içindeki değişken son değerini korur.
Varsayılan ParametreFonksiyon argümanlarına standart varsayılan değerler atanabilir.
Dinamik ParametreFonksiyonlar esnek ve değişen sayıda parametre kabul edebilir.

Dinamik Kod ve Modülerlik

PHP'de eval() fonksiyonu kullanılarak string içerisindeki bir kod bloğu dinamik olarak yürütülebilir:
PHP
Kod:
eval('echo "Merhaba Uydudoktoru Üyeleri";');
Modüler kod yapıları tasarlamak, dosyaları birbirine dahil etmek ve projeyi bölümlere ayırmak için ise include veya require fonksiyonları kullanılır:
PHP
Kod:
include 'header.php';
require 'config.php';
Ek olarak, modern web uygulamalarının vazgeçilmezi olan güvenli dosya yükleme (file uploads) ve HTTP bağlantı yönetimi (connection handling) gibi tüm gelişmiş protokol çözümleri PHP mimarisinde dahili olarak desteklenmektedir.
 
Son düzenleme:

GÜNCELLEME: Modern PHP (8.x) Dünyasında Neler Değişti?

Farklı dillerden esinlenerek hayatımıza giren PHP, yıllar içinde devasa bir evrim geçirdi. Konuyu biraz daha derinleştirmek ve günümüz standartlarına uygun pratik ipuçları eklemek adına bu ek rehberi hazırladık.

1. Modern Değişken Tanımlama ve Süper Globaller

İlk mesajımızda bahsettiğimiz dışarıdan gelen değişkenleri doğrudan $name şeklinde almak (yani eski register_globals özelliği), güvenlik açıkları nedeniyle modern PHP sürümlerinde tamamen kaldırılmıştır. Artık verileri global diziler üzerinden filtreleyerek alıyoruz.
İstek TürüEski YöntemGüvenli ve Modern Yöntem (PHP 8.x)
POST Form Verisi$ad = $name;$ad = htmlspecialchars($_POST['name'] ?? '');
GET (URL) Verisi$id = $id;$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
Not: ?? (Null Coalescing) operatörü sayesinde, eğer veri gelmediyse değişkenin hata vermesini önleyip doğrudan boş değer veya varsayılan bir değer atayabiliyoruz.

2. Değişken Tiplerini Ekranda İnceleme (Debugging)

Kod yazarken bir dizinin veya değişkenin o an hangi tipte olduğunu ve içinde ne barındırdığını görmek için echo yerine laboratuvar araçlarımızı kullanırız:
PHP
Kod:
$dizi = ["Uydudoktoru", "Forum", 2026];

// Standart çıktı (Sadece içeriği basar)
print_r($dizi);

// Teknik çıktı (Veri tiplerini ve uzunluklarını da gösterir)
var_dump($dizi);

3. PHP 8 ile Gelen Devrim: Match İfadesi

Metnimizde bahsettiğimiz esnek dil yapısına en güzel modern örneklerden biri switch-case yapısının yerine gelen match ifadesidir. Çok daha temiz ve hatasız kod yazmayı sağlar:
PHP
Kod:
$kullanici_tipi = 'admin';

$yetki = match ($kullanici_tipi) {
    'admin'   => 'Tam Yetkili Yönetici',
    'editor'  => 'İçerik Editörü',
    'uye'     => 'Standart Üye',
    default   => 'Misafir Ziyaretçi',
};

echo $yetki; // Çıktı: Tam Yetkili Yönetici

4. Güvenli Dosya Dahil Etme (include vs require)

Büyük projeleri modüllere bölerken kullandığımız bu iki fonksiyon arasındaki hayati farkı bilmek sunucu sağlığı için çok önemlidir:
  • include 'dosya.php'; -> Eğer dosya.php bulunamazsa PHP bir uyarı (Warning) verir ama kodun altındaki diğer işlemleri çalıştırmaya devam eder.
  • require 'dosya.php'; -> Eğer dosya.php bulunamazsa PHP ölümcül hata (Fatal Error) verir ve scriptin çalışmasını anında durdurur. Veritabanı bağlantı dosyaları gibi kritik yerlerde her zaman require_once kullanılmalıdır.
 
Geri
Yukarı