Jump to content
Üyelik kaydınızı yaparak son yazılan içeriklerden haberdar olun! ×

PHP

  • entries
    10
  • comments
    0
  • views
    538

Değişkenler - PHP


Doğuhan ELMA

44 views

PHP'de değişkenler, bir isimle belirtilen ve değerleri tutan veri saklama birimleridir. Bir değişken, bir programın çalışma zamanında farklı değerler alabilir. Değişkenler, programınızda veri saklamak ve bu veriler üzerinde işlem yapmak için kullanılır. PHP'de değişkenlerin bazı özellikleri şunlardır:

Değişken Tanımlama ve Kullanma

Bir değişken, $ işaretiyle başlar ve bir isimle tanımlanır. Değişken isimleri harf veya alt çizgi ile başlamalıdır ve alfanümerik karakterlerden oluşabilir. Büyük-küçük harfe duyarlıdır. Değişken isimleri kesinlikle sayı ile başlayamaz.

$degiskenAdi = "Merhaba, Dünya!";
echo $degiskenAdi; // Merhaba, Dünya!

 

Değişken Türleri:

PHP'de değişkenler dinamik türe sahiptir, yani bir değişkenin türü belirli bir değere atanarak otomatik olarak belirlenir.

Integer (Tam Sayı): $sayi = 10;

Float (Ondalıklı Sayı): $ondalikli = 3.14;

String (Metin): $metin = "Bu bir metindir.";

Boolean (Mantıksal): $dogruMu = true;

Array (Dizi): $dizi = array(1, 2, 3);

Object (Nesne): $nesne = new MyClass();

Null: $bos = null;

 

Değişken Kapsamı:

Değişkenlerin kapsamı, bir değişkenin hangi bölümde tanımlandığına bağlıdır. Genel olarak, PHP'de üç farklı kapsam türü vardır:

Global Değişkenler: Dosya içinde herhangi bir yerde tanımlanabilir ve tüm betikte erişilebilir.

Yerel Değişkenler: Fonksiyon veya method içinde tanımlanır ve sadece o kapsamda geçerlidir.

Statik Değişkenler: Fonksiyon içinde tanımlanır, ancak fonksiyon her çağrıldığında değeri korur.

 

Değişkenlerin Ekrana Yazdırılması

Değişkenler echo, print, printf, var_dump gibi fonksiyonlarla ekrana yazdırılabilir.

 

$$ işareti:

PHP'de "indirect referencing" veya "dolaylı başvuru" olarak bilinen bir kavramı ifade eder. Bu kavram, değişken adlarını değişken olarak kullanmamıza olanak tanır. Yani, bir değişkenin adını başka bir değişkenin içeriğinden alarak o değişkeni çağırabiliriz.

$degiskenAdi = "merhaba";
$$degiskenAdi = "Dünya!";

echo $merhaba; // Dünya!

 

PHP'de ${} sözdizimi:

Değişkenlerin dinamik olarak oluşturulmasına ve çağrılmasına olanak tanıyan bir sözdizimidir. Bu sözdizimi, bir değişkenin ismini bir başka değişkenin değeri ile oluşturmak ve kullanmak için kullanılır. Bu özellikle dinamik değişken adları oluşturmak veya değişken adlarını bir dize içinde birleştirmek için kullanışlıdır.

$anahtar = "kisi";
$kisi = [
    "ad" => "Ahmet",
    "soyad" => "Yılmaz"
];

echo ${$anahtar}["ad"]; // Ahmet

 

=& operatörü,

PHP'de bir değişkeni başka bir değişkene atamak için kullanılırken, ilk değişkenin ikinci değişkene referans olarak atanmasını sağlar. Bu operatör, bir değişkenin değil, o değişkenin tuttuğu değerin (adresin) atanması anlamına gelir. Bu durumda, iki değişken aynı bellek alanını gösterir ve biri değiştiğinde diğeri de otomatik olarak değişir. Bu, özellikle nesne kopyalaması yaparken veya büyük veri yapılarıyla çalışırken bellek kullanımını azaltmak için kullanışlı olabilir.

Örnek olarak:

$birinciDegisken = "Orjinal Değer";
$ikinciDegisken =& $birinciDegisken;

echo $birinciDegisken; // Orjinal Değer
echo $ikinciDegisken;  // Orjinal Değer

$birinciDegisken = "Yeni Değer";
echo $ikinciDegisken;  // Yeni Değer

 

Yukarıdaki örnekte, =& operatörü kullanılarak $birinciDegisken, $ikinciDegiskene referans olarak atanmıştır. İlk başta, her ikisi de "Orjinal Değer"i içerir. Ancak $birinciDegisken'e "Yeni Değer" atanınca, $ikinciDegisken de otomatik olarak "Yeni Değer"i alır. Çünkü aslında ikisi de aynı bellek adresini işaret etmektedir.

Bu operatör genellikle iki değişkenin aynı veriyi işaret etmesi durumunda kullanılır. Ancak, modern PHP versiyonlarında artık bu operatörü kullanmak tavsiye edilmez ve =& operatörünün kullanımı, yerine = veya clone gibi alternatiflerin tercih edilmesi önerilir. Özellikle nesneler ve diziler için clone kullanımı daha güvenli ve anlaşılır olabilir.

 

clone İfadesi:

class Person {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
}

$person1 = new Person("John");
$person2 = clone $person1;

$person1->name = "Doe";

echo $person1->name; // Doe
echo $person2->name; // John

Bu örnekte, $person1 nesnesi oluşturulduktan sonra clone ifadesi kullanılarak $person2 nesnesi oluşturuldu. Sonrasında $person1'in adı "Doe" olarak değiştirildi, ancak $person2'nin adı "John" olarak kaldı. Bu, $person1 ve $person2 nesnelerinin bağımsız kopyalarının oluşturulduğunu gösterir.

clone ifadesi, nesnelerin kopyalanmasını sağlar, ancak bu kopyaların tamamen bağımsız olmadığını unutmamak önemlidir. Örneğin, nesne içindeki diğer nesneler veya özellikler, referanslar aracılığıyla paylaşılabilir ve bu durumda kopyalanan nesnelerin değişiklikleri birbirini etkileyebilir. Bu durumu tamamen engellemek için "deep clone" (derin kopyalama) yapılması gerekebilir.

 

"Deep clone" (derin kopyalama):

Bir nesnenin tamamen bağımsız bir kopyasını oluşturmak için kullanılan bir kavramdır. Bu, nesnenin içinde başka nesneler veya diziler gibi referanslar bulunduğunda, bu referansları da kopyalayarak tamamen bağımsız bir kopya oluşturmayı sağlar. Yani, deep clone işlemiyle kopyalanan nesne, orijinal nesne üzerinde yapılan değişikliklerden etkilenmez.

PHP'de clone ifadesi varsayılan olarak "shallow copy" (düz kopyalama) yapar. Bu, bir nesnenin özelliklerini ve içindeki referansları kopyalar, ancak içerideki referanslara sahip olan nesneleri veya dizileri aynı referanslarla kopyalamaz. Bu durumda, orijinal nesne ile kopyalanan nesne arasında paylaşılan referanslar olabilir, dolayısıyla bir nesne üzerinde yapılan değişiklik diğerini de etkileyebilir.

clone ifadesi ile yapılan kopyalama işlemi şu şekildedir:

class Person {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
}

$person1 = new Person("John");
$person2 = clone $person1;

$person1->name = "Doe";

echo $person1->name; // Doe
echo $person2->name; // John

 

Yukarıdaki örnekte, $person1 nesnesi oluşturulduktan sonra clone ifadesi kullanılarak $person2 nesnesi oluşturuldu. $person1'in adı "Doe" olarak değiştirildiğinde, $person2 nesnesi bundan etkilenmedi çünkü clone ifadesi ile yapılan kopyalama "shallow copy" olarak gerçekleşti.

Ancak, eğer nesneler arasında başka nesne veya dizi referansları varsa ve bu durumda da bağımsızlık isteniyorsa, "deep clone" işlemi yapılması gerekir. PHP'de bu işlemi elle yapmak oldukça karmaşıktır, ancak bazı durumlarda özel kopyalama fonksiyonları veya serileştirme (serialize ve unserialize) işlemleri kullanılabilir. Örneğin:

<?php

class Person {
    public string $name;
    public Address $address;

    public function __construct(string $name,Address $address) {
        $this->name = $name;
        $this->address = $address;
    }

    public function __clone() {
        // Derin kopyalama işlemi
        $this->address = clone $this->address;
    }
}

class Address {
    public string $city;

    public function __construct(string $city) {
        $this->city = $city;
    }
}

$address = new Address("New York");
$person1 = new Person("John", $address);
$person2 = clone $person1;

$person1->name = "Doe";
$person1->address->city = "Los Angeles";

echo $person1->name . " lives in " . $person1->address->city; // Doe lives in Los Angeles
echo $person2->name . " lives in " . $person2->address->city; // John lives in New York

Bu örnekte, Person ve Address sınıfları kullanılarak deep clone işlemi gerçekleştirilmiştir. Person sınıfının __clone metodu ile Address nesnesi için de ayrı bir kopyalama işlemi yapılmıştır. Bu sayede, $person2 nesnesi, $person1'den tamamen bağımsız hale gelmiştir ve içindeki Address nesnesi üzerinde yapılan değişiklikler $person2'yi etkilememiştir.

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...