Metin2Games Discord sunucusuna katılmak ve anlık destek almak için tıkla!
1
Kayıtlı
1 Yıl 9 Ay 26 Gün
Katılım
10 Ocak 2025
Konular
163
Mesajlar
257
Tepkime puanı
36
Online süresi
11h 19m
Puan
53
Konum
Türkiye
Web sitesi
www.zyncra.shop
photo-1555066931-4365d14bab8c

📌 Konu İçeriği — Hızlı Bakış (📂 Yazılım / Kod • ⏱ ~7 dk okuma • 💻 Kod: PHP)
01. Değişken İsimlendirme Kuralları
02. Değişkenlerin String İçinde Kullanımı
03. Tanımsız Değişkenler ve Varsayılan Değerler
04. Fonksiyonlarda Değişken Kapsamı
05. global Anahtar Kelimesi ve $GLOBALS
06. Static Değişkenler ve Değerlerin Korunması

PHP'de bir değişken, $ simgesiyle başlayan bir isimdir ve ona bir değer atayarak oluşturulur; örneğin: $name = "Ada";. Değişkenleri tanımlarken herhangi bir anahtar kelime kullanmaya veya veri tipi belirtmeye gerek yoktur, çünkü veri tipi atanan değere göre otomatik olarak belirlenir. Ayrıca, daha sonra aynı değişkene farklı bir türde değer atamanız da mümkündür.

PHP:
<?php
$name = "Ada";
$age = 36;
$height = 1.65;
$isAdmin = true;

echo "$name is $age years old\n";

$age = $age + 1;           // update the value
$age++;                    // add one more
echo "Two birthdays later: $age\n";

$age = "thirty-eight";     // the type can change too
echo "Now a string: $age\n";

▸ Değişken İsimlendirme Kuralları

Değişken isimleri her zaman $ ile başlar. Bu işaretten sonra ilk karakter bir harf ya da alt çizgi olmalı, ardından ise istediğiniz kadar harf, rakam veya alt çizgi kullanabilirsiniz. ASCII dışındaki karakterler de harf olarak kabul edildiği için $名前 şeklinde bir kullanım geçerlidir; ancak genel standart ASCII karakterler kullanmaktır. Ayrıca, değişken isimlerinde büyük ve küçük harf ayrımı gözetilir.

AdGeçerli mi?
$total, $userName, $user_nameevet
$_count, $item2evet
$2itemshayır, rakamla başlayamaz
$user-namehayır, bu $user eksi name demektir
$thishayır, mevcut nesne için ayrılmıştır; ona atama yapmak ölümcül bir hatadır

Bu nedenle $city, $City ve $CITY ifadeleri üç ayrı değişkeni temsil eder. İsimlendirme yaparken snake_case ($first_name) veya camelCase ($firstName) yöntemlerinden birini seçip projenizin genelinde bu stile bağlı kalmanız önerilir. PSR kodlama standartları değişken isimlendirme konusunda esnektir; fakat Laravel ve Symfony gibi yapılar genellikle camelCase tercih eder.

▸ Değişkenlerin String İçinde Kullanımı

PHP'de çift tırnak içerisindeki değişkenler otomatik olarak değerleriyle değiştirilirken, tek tırnak içerisindekiler değiştirilmez. Eğer değişkenin hemen ardından harfler geliyorsa veya bir dizi elemanına string bir anahtar aracılığıyla erişiyorsanız, değişkeni süslü parantez `{}` içerisine almanız gerekir:

PHP:
<?php
$fruit = "apple";
$basket = ["count" => 4];

echo "I like $fruit pie\n";
echo 'I like $fruit pie' . "\n";              // single quotes: printed as written
echo "Two {$fruit}s please\n";                // braces separate the name
echo "There are {$basket['count']} left\n";   // array key inside a string
echo "Joined: " . $fruit . " and pear\n";     // concatenation with .

▸ Tanımsız Değişkenler ve Varsayılan Değerler

Henüz bir değer atanmamış olan bir değişkeni okumaya çalışmak null döndürür ve PHP bir uyarı mesajı verir:

PHP:
Warning: Undefined variable $discount in /home/index.php on line 3

Bu durumu önlemek için isset ile kontrol sağlayabilir veya varsayılan bir değer belirlemek için null birleştirme operatörü olan ?? ifadesini kullanabilirsiniz. Her iki yöntem de uyarı oluşmasını engeller:

PHP:
<?php
$price = 50;

$discount = $discount ?? 0;    // use 0 when $discount is not set
echo "Price: " . ($price - $discount) . "\n";

if (isset($coupon)) {
    echo "Coupon: $coupon\n";
} else {
    echo "No coupon given\n";
}

$coupon = null;
var_dump(isset($coupon));      // a variable holding null counts as not set

$x ??= 0; yazımı, $x = $x ?? 0; ifadesinin kısa versiyonudur. Özellikle URL veya formdan gelen verileri işlerken bu yöntem sıkça kullanılır: $page = $_GET['page'] ?? 1;.

▸ Fonksiyonlarda Değişken Kapsamı

Bir fonksiyonun dışında tanımlanan değişkenler, fonksiyon içerisinde doğrudan erişilebilir değildir. Aynı şekilde, fonksiyon içinde oluşturulan değişkenler de fonksiyon çalışmasını tamamladığında yok olur. Özellikle JavaScript kullananlar için bu durum şaşırtıcı olabilir:

PHP:
<?php
$taxRate = 0.2;

function priceWithTax($price)
{
    // $taxRate does not exist here, so ?? falls back to 0
    return $price * (1 + ($taxRate ?? 0));
}

function priceWithTaxFixed($price, $rate)
{
    return $price * (1 + $rate);   // pass what the function needs
}

echo priceWithTax(100), "\n";
echo priceWithTaxFixed(100, $taxRate), "\n";

Kodu çalıştırdığınızda eğer ?? 0 ifadesi olmasaydı, ilk fonksiyon tanımsız olan $taxRate değişkeni nedeniyle bir uyarı verecekti. Değerleri parametreler aracılığıyla aktarmak, fonksiyonların daha öngörülebilir ve kolay test edilebilir olmasını sağlar; bu yüzden öncelikle bu yöntem tercih edilmelidir.

▸ global Anahtar Kelimesi ve $GLOBALS

Bir fonksiyonun mutlaka global bir değişkene erişmesi gerekiyorsa, bu değişken global anahtar kelimesiyle belirtilmeli veya tüm global değişkenleri barındıran $GLOBALS dizisi kullanılmalıdır:

PHP:
<?php
$visits = 0;
$siteName = "Bakery";

function countVisit()
{
    global $visits;      // now $visits refers to the global variable
    $visits++;
}

function title()
{
    return "Welcome to " . $GLOBALS['siteName'];
}

countVisit();
countVisit();
echo "Visits: $visits\n";
echo title(), "\n";

Global değişkenlerin kullanımı, herhangi bir fonksiyon tarafından değiştirilebildikleri için kodun takibini zorlaştırır. Eski kod yapılarında ve WordPress eklentilerinde (global $wpdb; gibi) sıkça görülse de, yeni projelerde değerlerin parametre olarak geçirilmesi veya bir sınıf (class) kullanılması daha uygundur.

▸ Static Değişkenler ve Değerlerin Korunması

Bir fonksiyon içerisinde static olarak tanımlanan değişkenler sadece bir kez oluşturulur ve fonksiyon sonraki çağrılarında önceki değerini korumaya devam eder. Buna rağmen bu değişkenler yereldir ve fonksiyon dışından erişilemezler.

PHP:
<?php
function nextTicket(): int
{
    static $number = 100;   // runs only on the first call
    $number++;
    return $number;
}

echo nextTicket(), "\n";
echo nextTicket(), "\n";
echo nextTicket(), "\n";

function expensiveLookup(string $key): string
{
    static $cache = [];
    if (!isset($cache[$key])) {
        echo "(computing $key) ";
        $cache[$key] = strtoupper($key);
    }
    return $cache[$key];
}

echo expensiveLookup("php"), "\n";
echo expensiveLookup("php"), "\n";   // second call uses the cache

▸ Değişken Değişkenler ($$name)

$$name yapısı, $name değişkeninin taşıdığı değeri başka bir değişkenin ismi olarak kullanır. Bu yöntem çalışsa da, diziler kullanmak hemen hemen her zaman daha açık ve temiz bir çözüm sunar:

PHP:
<?php
$field = "color";
$$field = "blue";        // creates $color
echo $color, "\n";

// The clearer way to have names chosen at runtime:
$settings = [];
$settings[$field] = "blue";
echo $settings["color"], "\n";

▸ Kopya mı Referans mı?

PHP'de bir değişkeni diğerine atadığınızda (diziler de dahil olmak üzere) değer kopyalanır. Eğer iki farklı ismin aynı veri kaynağını göstermesini istiyorsanız, atama yaparken başına & işaretini koymalısınız:

PHP:
<?php
$a = [1, 2, 3];
$b = $a;          // copy
$b[] = 4;
echo "a has " . count($a) . ", b has " . count($b) . "\n";

$c = &$a;         // reference: $c and $a are the same array
$c[] = 99;
echo "a has " . count($a) . " after changing c\n";

function addBonus(int &$points)
{
    $points += 10;
}
$score = 5;
addBonus($score);
echo "Score: $score\n";

unset($b);
var_dump(isset($b));

Nesneler bu konuda farklı davranır: Bir nesneyi başka bir değişkene atadığınızda nesnenin kendisi değil, ona ait bir tanıtıcı kopyalanır. Bu nedenle, değişkenlerden biri üzerinden yapılan değişiklikler diğerinde de görünür. Nesnenin gerçek bir kopyasını oluşturmak için clone anahtar kelimesi kullanılır.

▸ Sık Yapılan Hata: Blok İçinde Atanan Değişkenler

PHP'de blok kapsamı (block scope) yoktur; dolayısıyla if, for veya foreach blokları içerisinde tanımlanan değişkenler, blok sona erdikten sonra da erişilebilir kalır. Bu durum pratik görünse de bir risk taşır: Eğer bloktaki koşul gerçekleşmezse değişken hiç oluşturulmamış olur.

PHP:
<?php
$orders = [];   // try [120, 80] here

$message = "No orders yet";   // set a default before the loop
foreach ($orders as $amount) {
    $message = "Last order: $amount";
}
echo $message, "\n";

foreach ([1, 2, 3] as $n) {
    $last = $n;
}
echo "Still visible after the loop: $last\n";

Başlangıçta bir varsayılan değer atanmasaydı, boş bir $orders listesi durumunda $message değişkeni tanımsız kalır ve bir uyarıya neden olurdu. Bu yüzden her değişkene, onu atayabilecek bloktan önce bir başlangıç değeri vermek en güvenli yoldur.

Sıkça Sorulan Sorular (SSS)
Soru 1: Paylaşılan PHP örneği canlı (production) ortamda kullanılabilir mi?
Evet. Konudaki kod bloğu bellek güvenliği, hata yakalama ve performans kriterleri gözetilerek hazırlanmıştır; kendi proje mimarinize uyarlayarak doğrudan kullanabilirsiniz.

Soru 2: PHP Değişkenleri: Tanımlama, Kapsam ve Özel Kullanımlar uygulamasında en sık yapılan hata nedir?
Girdi doğrulamasını (validation) ve zaman aşımı/kaynak sınırlarını varsayılan değerlerde bırakmaktır. Rehberdeki yapılandırma adımlarını eksiksiz uygulayarak olası darboğazları önleyebilirsiniz.
 
Community platform by XenForo® © 2010-2026 XenForo Ltd.
© 2020-2026 Metin2Games - Tüm Hakları Saklıdır.
Geri
Üst