Ben bu anlamaya mümkün olmamıştım. Dil-çek tipi değilse, arayüzler size ne fayda sağlar?
Arayüzleri program bir alt sınıf "unutuyor" üst sınıftaki bazı soyut yöntemi uygulamak için ne zaman daha tahmin edilebilir erken ve başarısız olmasına neden.
PHP'nin geleneksel OOP'deki, bir çalışma zamanı hatası sorunu aşağıdaki gibi bir şey güvenmek zorunda:
class Base_interface {
function implement_me() { assert(false); }
}
class Child extends Base_interface {
}
Lütfen arabirimin alt sınıflarından birinin alt sınıfı kullanımı sırasında yerine daha sonra ilan edilir zamanda, böyle bir yöntem uygulamak değil zaman bir arayüz ile, anında geri bildirim almak.
this link (güzel özetliyor) Alındığı:
Ben şahsen birden çok DBMS destek vardır bir DataAccess tabaka oluştururken düzgün bir çözüm arayüz bulabilirsiniz. Her DBMS uygulama sizin veri-access posibilities genişleyen yaparken Yani genel tanımlı functionschema kullanmak zorunda TransactionRollback Sorgu, FetchAssoc, FetchRow, numRows, TransactionStart, TransactionCommit, vb gibi fonksiyonları ile küresel DataAccess-arabirimini uygulamalıdır bunu Eğer işlev Sorgu şimdi ExecQuery adlı olmalıdır düşündüm çünkü 'yeniden başvuru noktada kırmak olmaz.
Arayüz Eğer büyük resimde geliştirmeye yardımcı olur :)
Türleri üç ayrı işleve hizmet eder:
İlk iki tür denetlemesini hiçbir şekilde gerekmez at all. PHP arayüzleri no arastïrdïm bile Yani, onlar still sadece bu iki nedenden dolayı yararlı olacaktır.
Ben Ruby yapıyorum zaman, örneğin, her zaman Ruby arayüzlere sahip olmadığı gerçeğine rağmen, benim arayüzleri düşünüyorum. Ve ben genellikle kaynak kodunda recording bu tasarım kararlarının bir yol var isterdim.
Öte yandan, ben arabirimleri kullanılan Java kod bol gördük, ama açıkça yazar onlar hakkında hiç düşünmemiştim. Aslında, bir durumda, bir girinti, boşluklarla ve yazar aslında sadece kopyalanan ve sınıf tanımını kopyaladım ve tüm yöntem gövdeleri silmiştiniz arayüzünde bazı artık yorumlardan görebiliyordu.
Şimdi üçüncü noktaya: PHP aslında does kontrol arayüzleri yazın. Zamanında denetler yazdıkça sırf onları kontrol yazamaz anlamına gelmez at all.
Ve, aslında, hatta zamanında onları kontrol etmez, bu before zamanını olur ki, load time onları denetler. Ve statik tür denetlemesini hemen hemen çok tanımı "tür denetleme zamanında ama ondan önce olmaz" değil mi?
Tip fonksiyon / metod imzaları ipucunu onunla bir sınıf arayüzleri ortamdır yolu hakkında çok daha fazla kontrole sahip olmanızı sağlar.
Eğer sadece sınıfın bir kullanıcı sadece yöntem parametreleri olarak doğru nesneleri kullanmak umuyoruz isterseniz, muhtemelen sorun içine edeceğiz. Bunu önlemek için, sadece kodları performansını düşürecektir kodunuzu kabartmak ve kesinlikle olurdu karmaşık kontrolleri ve filtreler uygulamak gerekiyor.
Tür Dayatma herhangi şişirilmiş, elle yazılmış çekler olmadan uyumluluk sağlamak için bir araç sağlar. Ayrıca sınıfları içeri uygun olacak nerede ne yapabiliriz ve dünyaya anlatmak için izin verir
Eğer yöntemleri şey uyumlu olması için uygulamak için ne biliyorum çünkü Özellikle Zend Framework gibi karmaşık çerçeveler, arabirimleri onlar size bir sınıftan beklemek ne söylemek çünkü canlı çok daha kolay ve.
Benim düşünceme göre, hiçbir nokta, gerek ve anlamı yok. Arayüzleri, görünürlük değiştiricileri veya tip ipuçları gibi şeyler aslında çalıştırmadan (bir anlamda) programı "doğruluğunu" uygulamak için tasarlanmıştır. Bu php gibi dinamik bir dilde mümkün olmadığından, bu yapıları esasen faydasız vardır. Onlar php ilave edildi neden tek nedeni böylece "kurumsal" pazar için dil daha cazip hale, daha java gibi görünmesi olduğunu.
Uncommented downvoting berbat: eklemek unuttum. ;/ /