PHP'nin __ özdevinimli_yükle Nasıl eşsiz (bir)?

0 Cevap php

PHP'nin __autoload() (documentation) bana oldukça ilginç. İşte nasıl çalışır:

  • Sen gibi, bir sınıf kullanmayı deneyin new Toast_Mitten() (dipnot 1)
  • Sınıf belleğe yüklü olmamıştır. PHP bir hata ile size çorap yumruğunu geri çeker.
  • Bu duraklar. Diyor "Bekle". "Tanımlanan bir __autoload() işlevi var." Onu çalışır.
  • Bu fonksiyon, bir şekilde dize Toast_Mitten classes/toast_mitten.php eşlenir ve bu dosyayı gerektiren bunu söylediler. Öyle.
  • Şimdi sınıf bellekte olduğu ve program çalışmaya devam eder.

Bellek yarar: sadece ihtiyacınız sınıfları yüklemez. Terseness faydası: her yerde bu kadar çok dosya da dahil olmak üzere durdurmak ve sadece autoloader içerebilir.

Yapılacak özellikle ilginç olsun

1) Sizin __autoload() sınıf adından dosya yolunu ve adını belirleyen otomatik bir yol var. Örneğin, belki de bütün sınıfları classes/ olan ve Toast_Mitten classes/toast_mitten.php olacaktır. Ya da belki classes/animal/mammal/animal_mammal_weasel.php olacak Animal_Mammal_Weasel gibi sınıflar, isim.

2) Kendi sınıfının örneklerini almak için bir fabrika yöntemini kullanın.

$Mitten = Mitten::factory('toast');

? Değilse, ben sadece genel bir örneğini iade edeceğiz; Mitten :: fabrika yöntemi "Ben öyleyse Toast_Mitten(), ben dönersiniz adında bir alt sınıfı var mı, bakalım, kendisine söyleyebilirim kendimi -.!. standart bir mitten Oh, __autoload() tost için is özel sınıf var bana söyler bak Tamam, burada bir örnek var "!

Bu nedenle, kod boyunca genel bir eldiveni kullanarak başlayabilirsiniz, ve gün sen tost için özel bir davranış gerektiğini geldiğinde, sadece o sınıf oluşturmak ve bam! - kod kullanıyor.

Benim soru iki yönlüdür:

  • (Fact) diğer dillerde benzer yapıları var mı? O Ruby has an autoload görmek, ama bunu kullanmak için bekliyoruz sınıflar, belirli bir komut belirtmek zorunda gibi görünüyor.
  • (Opinion) bu çok büyülü mi? En sevdiğiniz dili bu yapmaz ise, ya da "şık hey, biz bu olmalı", sizce "Ben memnunum Dil X değilim adam o özensiz değil mi?"

1 My apologies to non-native English speakers. This is a small joke. There is no such thing as a "toast mitten," as far as I know. If there were, it would be a mitten for picking up hot toast. Perhaps you have toast mittens in your own country?

0 Cevap