Nasıl Python OOP PHP OOP farkı nedir?

6 Cevap php

Python PHP yaptığı gibi herhangi bir cepten eksiklikleri varsa ben temelde merak ediyorum. PHP son birkaç sürümleri için kendi OOP uygulamaları geliştirmektedir. PHP daha iyi oluyor ama yine de mükemmel değil. Python için yeni ve Python cepten destek iyi ya da sadece karşılaştırılabilir olup olmadığını merak ediyorum.

Uygun OOP uygulamaları takip etmiyorum Python OOP'deki bazı sorunlar varsa ben kesinlikle bu bilmek istiyorum. Örneğin PHP, bildiğim kadarıyla kulüpler gibi çoklu miras için izin vermez.

Teşekkürler Herkes!

Edit: How about support for Public and Private? or support of variable types. I think these are important regarding building OOP software.

6 Cevap

Ben Python cepten desteği mevcut bir usul modeli üzerine OOP cıvatalı PHP karşıt olarak emekleme diline girmiş olduğu göz önüne alındığında çok daha iyi olduğunu söyleyebilirim.

Python OOP desteği çok güçlü; Birden çok devralma izin vermiyor, ve her şey (sınıfları, yöntemleri, vb dahil) birinci sınıf nesnesi olarak manipüle edilebilir olduğunu.

Polimorfizm ördek yazmak yoluyla ifade edilir. Örneğin, bir liste, bir demet, bir sözlük, bir dosya, web kaynak ve daha fazla aynı şekilde üzerinde yineleme yapabilirsiniz.

Orada len (liste) ile bir dizinin uzunluğunu almak yerine () list.len gibi debatably OO değil biraz bilgiçlik şeylerin bir yeri vardır, ancak onlar hakkında endişelenmenize iyi değil.

Sıradışı Python NYP modelinin bir yönü kapsülleme mekanizmadır. Temel olarak, Python programcılarının kötü şeyler yapmıyoruz, ve bu yüzden özel üye değişkenleri veya yöntemleri korumak için herhangi bir ölçüde kendi yolumdan gitmez varsayar.

Bu iki çizgi ile ve az iki ile biten başlar üyelerinin adlarını bozma çalışır. Onlar önüne sınıf ismi var ki böyle tanımlayıcılardır her yerde önce ek bir çizgi ile değiştirildi. böylece:

class foo:
    def public(self):
        return self.__private()
    def __private(self):
        return 5

print foo().public()
print foo()._foo__private()

başlayan ve alt karıştırılmış değildir, bu yüzden __init__ yöntem piton yeni örneklerini oluşturmak için kullandığı iki (veya daha fazla) ile biten isimler, yalnız bırakılır.

İşte link daha ayrıntılı olarak açıklayan bulunuyor.

Ayrıca: (bir uzantısı var yok rağmen) Python, PHP, aksine yerli operatör aşırı yükleme vardır. İster sevin ister sevmeyin, o orada.

Ben bu noktada karşılaştırılabilir olduğunu düşünüyorum. Basit bir test olarak, ben Design Patterns veya Patterns of Enterprise Application Architecture herhangi bir desen var şüpheliyim, tartışmasız en etkili iki kitap OOP'deki, bu da dilde uygulamak olanaksızdır.

Her iki dilde kendi infancies beri çarçabuk boyunca gelmiş.

Bildiğim kadarıyla çoklu kalıtım, genellikle creates more problems than it solves, ve, bu gün yaygın bir kasıtlı tasarım kararı olarak dilleri dışında bırakılmıştır.

Eğer "daha saf" OOP için arıyorsanız, size Smalltalk ve / veya Ruby bakıyor olmalıdır.

PHP OOP için desteği ile önemli ölçüde büyüdü, ama cepten en iyi uygulamaları takip edilmektedir çünkü eğer o (her zaman her şeyi yeniden yükler) çalışır şekilde, işler gerçekten yavaş alabilirsiniz. Hangi çok Raylar üzerinde PHP ile ilgili duymuyorum nedenlerinden biridir.