Bu Blogda Ara

Php 5 ve sınıflar etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Php 5 ve sınıflar etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

12 Temmuz 2010 Pazartesi

Php sınıflarında Yapıcılar ve yıkıcılar ( __construct ve __destruct)

PHP 5 gelişmiş sınıflar için yapıcı yöntemler ilan sağlar. bir constructor metodu her yeni oluşturulan nesne bu yöntemi arama Sınıfları, herhangi bir başlatma kullanıldığı önce nesne gerekebilir uygundur bu yüzden.

Not: Aile inşaatçı örtük eğer çocuk sınıfta bir yapıcı tanımlar denilen değildir. amacıyla gerekli olan bir ebeveyn yapıcı, ebeveyn için bir çağrı:: __construct () çocuk constructor içinde çalıştırın.

Örnek 1 yeni birleşik inşaatçı kullanarak
sınıf BaseClass (
function () (__construct
print "BaseClass yapıcısı \ n";
)
)

sınıf alt sınıf BaseClass (uzatır
function () (__construct
veli:: __construct ();
print "alt sınıf yapıcısı \ n";
)
)

$ Nesne = new BaseClass ();
$ Nesne = new alt sınıf ();
?>

PHP 5 a () fonksiyonu verilen bir sınıf için __construct bulamazsanız geriye doğru uyumluluk için, bu eski tarz constructor fonksiyonu için, sınıfın ismi ile arayacaktır. Etkili, o sınıfı (bir yöntem __construct adlı olsaydı uyumluluk sorunları olurdu sadece böyledir) hangi farklı anlam kullanıldı anlamına gelir.
Çöp yakma fırını
(Void __destruct) void

PHP 5 bir yoketme kavram diğer nesne yönelimli diller, benzer tanıttı C + + gibi. Yoketme yöntemi olarak en kısa sürede belirli bir nesne tüm başvuruları kaldırılır veya nesne açıkça yok edilir veya kapatma sırada herhangi bir sırada çağrılır.

Örnek 2 yoketme Örnek
sınıf MyDestructableClass (
function () (__construct
print "constructor \ n";
$ This-> name = "MyDestructableClass";
)

function () (__destruct
print "yok edilmesi". $ This-> ismi. "\ N";
)
)

$ Nesne = new MyDestructableClass ();
?>

yapıcıları gibi, ebeveyn yıkıcı örtük motor denilen olmayacaktır. amacıyla bir ebeveyn yoketme çalıştırmak için, biri açıkça üst araması gerekir: () yoketme vücutta __destruct.

Not: Yıkıcılar script kapatma sırasında HTTP zaten gönderildi başlıklarını çağırdı. script kapanma aşamasında çalışma dizini bazı SAPI'lerden (Apache gibi farklı olabilir).

Not: yoketme (script fesih zamanında denir) bir istisna atmaya çalışılıyor ölümcül bir hata olur.

Php 5 ve Özdevinimli Nesne

Birçok geliştirici nesne yönelimli uygulamalar yazma bir PHP kaynak dosya başına sınıfı tanımı oluşturun. En büyük sorun yaratan ve gereken uzun bir liste yazmak zorunda her script (her sınıf için başında) içerir.

PHP 5, bu artık gereklidir. Otomatik durumda henüz tanımlanmamıştır / arayüzü sınıf kullanmaya çalışıyorsunuz denir bir __autoload işlev tanımlayabilir. betik motoru son bir şans PHP bir hata ile başarısız önce sınıf yük verilen bu fonksiyon arayarak.

Not: İstisnalar __autoload fonksiyonu sonuçları catch bloğu ve ölümcül bir hata yakalanmış olamaz atıldı.

Not: Özdevinimli varsa kullanarak PHP CLI etkileşimli kipte değildir.

Not: sınıf ismi örneğin kullanılırsa call_user_func () o zaman .. gibi bazı tehlikeli karakterleri içerebilirler /. Bu __autoload olarak girdi () doğrulamak gibi işlevlerde kullanıcı girişi ya da en azından kullanmayın tavsiye edilir.

Örnek 1 Sartlandincisi örneği

Bu örnek dosyaları MyClass1.php ve MyClass2.php sırasıyla sınıfları MyClass1 ve MyClass2 yük çalışır.
fonksiyonu __autoload ($ class_name) (
require_once $ class_name. '. Php';
)

$ Nesne = new MyClass1 ();
$ Obj2 = new MyClass2 ();
?>

Bu örnek arayüzü ITest yük çalışır.

fonksiyonu __autoload ($ isim) (
var_dump ($ name);
)

sınıf Foo ITest (uygular
)

/ *
string (5) "ITest"

Ölümcül hata: Arayüzü 'ITest bulunamadı' ...
* /
?>

Php ve Sınıf (Class) Temelleri

Temelleri
sınıf

Her sınıf tanımı kelime sınıfı ile takip PHP bir sözcük değil herhangi bir ad olabilir bir sınıf ismi, başlar. sınıflar üyeleri ve yöntemlerin tanımı içeren küme parantezi, bir çift izledim. A sözde değişken $ this bir yöntem bir nesne kapsamında çağrıldığı zaman mevcuttur. $ This çağıran nesne (genellikle yöntem ait nesnenin referansını, ancak yöntem statik ikincil bir nesnenin bağlamdan denir başka bir nesne olabilir). Bu aşağıdaki örnek gösterilmiştir:

Örnek 1 $ this değişkeni nesne yönelimli dil
A sınıfı
(
fonksiyonu foo ()
(
(Isset ($ this)) (if
'$ This (' tanımlanmıştır echo;
get_class (echo $ this);
")" \ N echo;
) Else (
echo "\ $ this tanımlanmış değildir. \ n";
)
)
)

sınıf B
(
fonksiyonu bar ()
(
A:: foo ();
)
)

$ A = new A ();
$ A-> foo ();
A:: foo ();
$ B = new B ();
$ B-> bar ();
B:: bar ();
?>

Yukarıdaki örneğin çıktısı:

$ This (tanımlanan)
$ This tanımlanmış değildir.
$ This (tanımlanmaktadır b)
$ This tanımlanmış değildir.




Örnek 2 Basit sınıf tanımı
sınıf SimpleClass
(
/ / Member deklarasyon
$ Var kamu = 'varsayılan bir değer';

/ / Yöntem bildirimi
fonksiyonu displayVar () (public
$ This-> var echo;
)
)
?>

Varsayılan değer sabit bir ifade, (örneğin) bir değişken, bir sınıf üyesi veya bir işlev çağrısı olmalıdır.

Örnek 3 Sınıf üyelerinin varsayılan değeri
sınıf SimpleClass
(
/ / Geçersiz üye bildirimleri:
public $ var1 = 'merhaba'. 'dünya';
$ Var2 kamu = <<merhaba dünya
EOD;
$ Var3 = 1 2 halk;
$ Var4 = self kamu:: myStaticMethod ();
$ Var5 kamu = $ myVar;

/ / Geçerli üye bildirimleri:
$ Var6 = myConstant kamu;
$ Var7 = self kamu:: classConstant;
public $ var8 = array (true, false);


)
?>

Not: Bazı güzel fonksiyonları sınıflar ve nesneler kolu vardır. Siz Sınıf ve Nesne İşlevleri bakmak isteyebilirsiniz.

Yorumlu metinlerin aksine yorumsuz metinler herhangi bir duruk veri bağlamında kullanılabilir.

Örnek 4 Duruk veri örneği
sınıf foo (
/ / Gibi PHP 5.3.0 'dan itibaren
kamu $ bar = <<<'EOT'
bar
EOT;
)
?>

Not: Yorumlu metin desteği PHP 5.3.0 'da eklenmiştir.

yeni

Bir sınıfın yeni bir nesne örneğini oluşturmak için oluşturulması gerekir ve bir değişkene atanır. Bir nesneyi her zaman nesne hata bir istisna atar bir constructor tanımlı olmadığı sürece yeni bir nesne oluşturmak atanır. Sınıflar Destekleme önce (tanımlanmış olmalı ve bu bir gerekliliktir bazı durumlarda).

Örnek 5 örnek oluşturma
$ Örnek = new SimpleClass ();
?>

sınıf bağlamda, olası yeni bir benlik ve yeni anne-baba tarafından yeni bir nesne yaratmak.

Yeni bir değişkene bir sınıfın zaten oluşturulmuş örnek atayarak, yeni değişken atanan nesneyle aynı örneği erişir zaman. Bu davranış bir işleve örneğini geçen aynıdır. zaten oluşturulmuş olan nesnenin bir kopyası onu klonlama tarafından yapılabilir.

Örnek 6 Nesne Atama
$ Atanan = $ örnek;
$ Referans = & $ örnek;

$ Örnek-> var = '$ this değere sahiptir atanan';

$ Örnek = null; / / $ örnek ve $ referans null haline

var_dump ($ örnek);
var_dump ($ referans);
var_dump ($ atanmış);
?>

Yukarıdaki örneğin çıktısı:

NULL
NULL
nesne (SimpleClass) # 1 (1) (
["Var"] =>
string (30) "$ this değere sahiptir atanan"
)




uzatır

A sınıfı yöntemleri ve başka bir sınıfın üye bildiriminde anahtar uzanan kullanarak devralabilir. Mümkün çoklu derslere genişletmek için değil, bir sınıf sadece tek bir temel sınıf devralabilir.

Üst sınıf final gibi bir yöntem tanımlamıştır sürece miras yöntemleri ve üyeleri geçersiz, aynı adı ana sınıf tanımlanan onları redeclaring tarafından değiştirilebilir. Mümkün ebeveyn ile referans onlar tarafından geçersiz yöntemleri veya statik üyelerine erişmek için:

Örnek 7 Basit Sınıf Kalıtım
sınıf ExtendClass SimpleClass uzatır
(
/ / Redefine ana yöntem
fonksiyonu displayVar ()
(
echo "" class \ n uzatılması;
veli:: displayVar ();
)
)

$ = New ExtendClass () genişletilmiş;
$ Genişletilmiş-> displayVar ();
?>

Yukarıdaki örneğin çıktısı:

sınıf genişletme
varsayılan değer