- Katılım
- 2 Mar 2015
- Konular
- 59,189
- Mesajlar
- 88,441
- Çözüm
- 109
- Online süresi
- 4mo 16d
- Reaksiyon Skoru
- 14,280
- Altın Konu
- 2,398
- TM Yaşı
- 11 Yıl 3 Ay 7 Gün
- Başarım Puanı
- 1,051
- MmoLira
- 695,092
- DevLira
- 234
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
C++ veya Java'da, terim bir sınıfın aynı adı taşıyan bir sınıf metodunu birden fazla kez ancak farklı argümanlar ve/veya dönüş türüyle kullanabileceği anlamına gelir. PHP'de, aşırı yükleme terimi farklı bir yoruma sahiptir. Özelliklerin ve yöntemlerin dinamik olarak oluşturulabildiği bir özelliktir. PHP'nin sihirli yöntemleri (çift alt çizgiyle başlayan yöntem adları) dinamik özellikler ve yöntemler kurmak için kullanılır.
Aşırı yükleme amacıyla kullanılan sihirli yöntemler, henüz bildirilmemiş veya geçerli kapsamda görünmeyen özellikler veya yöntemlerle etkileşime girildiğinde çağrılır.
Emlak Aşırı Yüklenmesi
PHP'nin sihirli metotlarına örnek olarak __construct(), __destruct(), __tostring() vb. verilebilir. PHP, özellikleri aşırı yüklemek için aşağıdaki sihirli metotları kullanır.public __set ( string $name , mixed $value ) : void
public __get ( string $name ) : mixed
public __isset ( string $name ) : bool
public __unset ( string $name ) : void
Burada,
- __set(), korumalı, özel veya var olmayan erişilemeyen özelliklere veri yazmak için çalıştırılır.
- __get() erişilemeyen özelliklerden veri okur.
- __isset() erişilemeyen özelliklerde isset() veya empty()'ı çağırır.
- __unset() erişilemeyen özellikler üzerinde unset() çağrıldığında çağrılır.
Yukarıda kullanılan $ name argümanı, ayarlanacak veya alınacak özelliğin adıdır. __set() yönteminin $value argümanı, özelliğe atanacak değeri belirtir.
__isset() yöntemi belirli bir özelliğin ayarlanıp ayarlanmadığını kontrol eder. __unset() yöntemi özelliği kaldırır.
Özellik aşırı yüklemesi yalnızca nesne bağlamında çalışır . Herhangi bir statik bağlamda , bu sihirli yöntemler tetiklenmeyecektir. Bu nedenle statik olarak bildirilmemelidirler.
Örnek
Aşağıdaki kodda, sınıfta tanımlanmayan myprop isimli dinamik bir property set ediliyor ve alınıyor.
PHP:
<?php
class myclass {
public function __set($name, $value) {
echo "setting $name property to $value \n";
$this->$name = $value;
}
public function __get($name) {
echo "value of $name property is ";
return $this->$name;
}
}
$obj = new myclass();
# This calls __set() method
$obj->myproperty="Hello World!";
# This call __get() method
echo "Retrieving myproperty: " . $obj->myproperty . PHP_EOL;
?>
Aşağıdaki çıktıyı üretecektir:
setting myproperty property to Hello World!
Retrieving myproperty: Hello World!
__set () ve __get() büyülü yöntemleri de private olarak bildirilen bir özelliği ayarlar ve alır. Aşağıdaki ifadeyi myclass'ın içine (fonksiyon tanımlarından önce) ekleyin.
private $myproperty;
Özelliğin olup olmadığını kontrol edebilirsiniz, myclass'ta __isset() metodunu tanımlayın.
public function __isset($name) {
return isset($this->$name);
}
Bu ifadeyle özelliğin ayarlanıp ayarlanmadığını kontrol edin.
var_dump (isset($obj->myproperty));
Bu durumda true değeri döndürülür.
myclass'ta tanımlanan __unset() metoduyla dinamik olarak oluşturulan özelliğin ayarını kaldırmak için:
public function __unset($name) {
unset($this->$name);
}
Aşağıdaki kod false değerini döndürür:
var_dump (isset($obj->myproperty));
Yöntem Aşırı Yükleme
Yöntemleri dinamik olarak ayarlamak için kullanılan iki sihirli yöntem __call() ve __callStatic() ' tir.public __call (string $name , array $arguments) : mixed
public static __callStatic (string $name , array $arguments) : mixed
__call(), bir nesne bağlamında erişilemeyen (tanımlanmamış veya özel olmayan) yöntemleri çağırırken tetiklenir. Öte yandan, __callStatic(), statik bir bağlamda erişilemeyen yöntemleri çağırırken tetiklenir.
Örnek
Aşağıdaki örnek PHP'de yöntem aşırı yüklemesini göstermektedir.
PHP:
<?php
class myclass {
public function __call($name, $args) {
// Value of $name is case sensitive.
echo "Calling object method $name with " . implode(" ", $args). "\n";
}
public static function __callStatic($name, $args) {
echo "Calling static method $name with " . implode(" ", $args). "\n";
}
}
$obj = new myclass();
# This invokes __call() magic method
$obj->mymethod("Hello World!");
# This invokes __callStatic() method
myclass::mymethod("Hello World!");
?>
Aşağıdaki çıktıyı üretecektir:
Calling object method mymethod with Hello World!
Calling static method mymethod with Hello World!
" -> " operatörünün kullanılmasının, yöntemin bir örnek yöntem olduğu anlamına geldiğini ve "::" operatörünün, yöntemin bir statik yöntem olduğu anlamına geldiğini unutmayın.

