basit açıklama PHP OOP ve Prosedürel?


106

PHP öğrenmek ve OOP ve Prosedür hakkında bir Fikir almak istiyorum. OOP ve Procedural hakkında başka bloglar ve eğitimler okudum, ancak yaklaşımı hala anlayamıyorum.

OOP ve Prosedürel

  1. Hangisini öğrenmeliyim?
  2. Koddaki fark nedir? etkileri nelerdir?
  3. Bir PHP çerçevesi OOP yaklaşımına nasıl yardımcı olabilir? (CodeIgniter'ı öğrenmek istiyorum)
  4. Prosedürün bir Çerçeveye ihtiyacı var mı?

Her ikisinin de kod farkını gerçekten bilmek istiyorum, benim OOP anlayışım sizin gibi bir sınıf yaratmanız ve buna erişilebilmesidir. (Bunun doğru olup olmadığını bilmiyorum).

Teşekkürler!



1
çok uzun tek bir bağlantı olmadığında ortaya çıkan yüz
Félix Gagnon-Grenier



Yanıtlar:


280

Arka plan: Şunları öneren "basit bir açıklama" istediniz:

  1. Jargonsuz, saçma sapan bir genel bakış istiyorsunuz
  2. Baştan öğrenmenize yardımcı olacak bir şey istiyorsunuz
  3. İki kişinin soruya aynı şekilde cevap vermediğini keşfettiniz ve bu kafa karıştırıcı. Burada basit bir açıklama istemenizin nedeni budur. Evet?

Kısa Jargonsuz Cevap:

  1. Birçok giriş açıklaması hızlı bir şekilde "OOP gerçek dünya" örneklerine atlar. Bunlar yardımdan çok kafa karıştırabilir, bu yüzden şimdilik bunu görmezden gelmekten çekinmeyin.
  2. Kaynak kodunu sadece tek tek dosyalara kaydedilen işlevselliğin "parçaları" olarak düşünebilirsiniz.
  3. Bu "yığınları" düzenlemenin farklı yolları vardır; programlama dilinin kuralları, geliştiricinin / geliştiricilerin geçmişi ve eğitimi veya sadece eski kişisel tercih gibi şeylere bağlı olarak.
  4. OOP ve Prosedürel programlama, kodun bu "parçalarının" nasıl organize edileceğine ve düzenleneceğine ilişkin genel olarak kabul gören iki temel metodolojidir.

Uzun Jargonsuz Cevap:

Prosedürel ve OOP, bilgisayar programlamasının temel sorunlarından sadece bir tanesidir: kodunuzun nasıl anlaşılmasını kolaylaştırırsınız ve profesyonelce bakımını yapmak çocuk oyuncağı . Aslında, OOP'nin bazı ilkelerini izleyen "Prosedürel" kod yazabilirsiniz, bu nedenle ikisi birbirine zıt olmak zorunda değildir.

PHP'nin "blokta yeni bir çocuk" olduğu diğer nesne yönelimli programlama dillerini öğrendikten sonra anlayışınız gerçekten artacaktır .

Deneyim geliştirirken öğrenecekleriniz hakkında hızlı bir genel bakış :

  • Yararlı görevler yapan PHP kaynak kodu yazabilirsiniz
  • Yararlı görevleri kod "parçaları" halinde düzenleyebilirsiniz
  • Kaydedildikleri dosyalardan bağımsız olarak kod "parçalarını" düşünebilirsiniz.
  • Bazen kod bu "parçaları" olacak farklı parametrelere göre çalışma yönteme geçen
  • Parametreleri kabul eden kod parçalarına "İşlevler" denir
  • İşlevler birlikte "gruplandırılabilir" ve bunu yapmanın farklı yolları vardır:
    • Örneğin: hayatınız boyunca yazdığınız tüm işlevleri, işlev adına göre alfabetik sırayla listelenmiş tek bir büyük PHP dosyanız olabilir.
    • Örneğin: konuya göre bir araya getirilmiş işlevlere sahip birden çok PHP dosyanız olabilir [ör. Temel dize işleme işlevleri, dizileri işleme işlevleri, dosya girişi / çıkışı için işlevler, vb.]
  • OOP, İşlevleri bir "Sınıf" halinde "kümelemenin" özel bir yoludur
  • Sınıf, kodu birleşik bir bütün olarak ele alabilmeniz için birlikte "yığın oluşturma" kodunun başka bir seviyesidir
  • Bir Sınıf, yöntemlerin ve özelliklerin bir "yığınlanması" olarak düşünülebilir

    • yöntemler , mantıksal olarak anlamlı bir şekilde birbiriyle ilişkili işlevlerdir. "Yöntem" ve "işlev" sözcükleri temelde aynı şey için iki farklı terimdir.
    • özellikler basitçe sınıfla ilgili veri değerleridir. Bunlar , sınıftaki birden fazla işlevin bunlara erişimi olması gerektiğinden , kasıtlı olarak herhangi bir işlev için izole edilmemiş değerlerdir .
      • Örneğin , sınıfınızda astronomi yapmak için bir dizi yöntem varsa, sınıfın özellikleri, tüm astronomi yöntemlerinin bilmesi gereken bazı ünlü sayıların değerleri olabilir (Pi, ışık hızı, belirli gezegenler arasındaki mesafe, vb.).
    • Bu, çoğu OOP açıklamasının kafa karıştırıcı hale geldiği yerdir çünkü hızla konu dışına çıkabilen " gerçek dünya örneklerine " ayrılırlar . Genellikle, "gerçek dünya", belirli bir bireyin ontolojik perspektifleri için bir örtmecedir. Bu, yalnızca kavramı bir başkasına öğretecek kadar iyi anladığınızda yararlı olma eğilimindedir .
    • OOP'yi kafa karışıklığı olmadan anlamak için şimdilik "gerçek dünya" örneklerini atlayabilir ve sadece koda odaklanabilirsiniz. Sınıf, basitçe, işlevleri (diğer adıyla yöntemler) ve özellikleri (diğer adıyla veriler), her bir "yığın" ın belirli bir konu veya işlevle ilgilendiği bir veya daha fazla ilgili "yığın" içinde PHP kodu olarak depolamanın bir yoludur . Başlamak için bilmeniz gereken tek şey bu.
  • Sınıf yararlıdır çünkü kodunuzu çok yüksek bir seviyede anlamanızı, kullanmanızı ve bakımını kolaylaştıracak şekilde düzenlemenize olanak tanır .

  • Birisi çok sayıda işlev yazıp bunları çok sayıda Sınıfta düzenlediğinde ve bunların harika bir şekilde birlikte çalışmasını sağladığında, her şeyi bir araya toplar ve buna "Çerçeve" adını verirler .
  • Çerçeve, bir veya daha fazla kişinin üzerinde hemfikir olduğu, kodun düzenlenme şeklini sevdikleri ve çalışma tarzlarına, tercihlerine, değerlerine, dünya planlarına uyduğu için bir sonraki en yüksek "yığın oluşturma" seviyesidir (kodlama stili ve kurallar dahil) hakimiyet vb.

Ayrıca bakınız


1
@dreftymac: Beni arkamdan garip bir şekilde silmek yerine, eklemelerimde nelerin iyileştirilebileceği hakkında bana geri bildirimde bulunabilirdin. Gerçekten mi. Yapıcı eleştiriyi memnuniyetle karşılıyorum ve sizi de aynısını yapmaya davet ediyorum.
Flavius

1
@Flavius ​​Tamam. Çabanız ve eklemeler yapmak için bir dakikanızı ayırdığınız için minnettarım. Bunu düşündükten sonra, yaptığınız eklemenin kendi bağımsız cevabını hak etmesi mantıklı görünüyor.
dreftymac

2
Bir ek: Bir sınıf, işlev verilerini bir araya getirmek için de kullanışlıdır, böylece parametrelerde iletmek zorunda kalmazsınız.
chiborg

1
Özellikle "Çerçeve" tanımınız için +1. Pek çok kişinin çerçevenin ne olduğunu açıklamaya çalıştığını duydum ve bence sizinki anlaşılması en kolay olanı.
TecBrat

1
dostum ... bu oop ve prosedürel hakkında okuduğum en iyi açıklama ve ÇOK OKUYORUM! harika iş gerçekten etkili, basit ve doğrudan konuya. haklısınız insanlar her zaman gerçek dünyadan örnekler kullanıyorlar ve bu hiçbir şeyi anlamanın kolay bir yolu değil, saçmalık!
thechrishaddad

25

OOP, bir tasarım modelinden başka bir şey değildir. Yeni başlıyorsanız, prosedür yaklaşımına odaklanarak temelleri öğrenin. En önemlisi, döngüler, koşullar ve diğer prosedürleri çağırma gibi temel ilkeleri öğrenin.

Prosedürel kodunuzu oluştururken, ilgili yöntemleri tek bir kaynak dosyaya ekleyerek bir alışkanlık edinin. Prosedürlerinizi mantıksal birimlere ayırmayı öğrenin ve sonra zaten nesne odaklı olmaya başlıyorsunuz. Temel olarak, bir nesne, sırf aynı veri kümesi üzerinde çalıştıkları için birbirleriyle ilişkili olan bir yöntem koleksiyonundan başka bir şey değildir. (Burada veritabanlarından bahsetmiyorum, uygulama verilerinden bahsediyoruz!)

OO, her şeyi basit bloklara bölerek kodunuzu daha mantıklı hale getirmek için kullanılır. Doğru blokları birleştirerek eksiksiz bir uygulama elde edersiniz. OO, tüm sorunlarınızı çözecek bir gümüş mermi veya altın bir çekiç değildir. Ancak yaptığı şey, kodunuzun anlaşılmasını kolaylaştırmaktır.

Yine de, bazı insanlar nesneleri yüzlerce yöntemle devasa süper nesnelere dönüştürerek hâlâ tam bir karmaşa yaratmayı başarıyor. Bu tür nesneler, herhangi bir gerçek mantık olmadan bir araya getirilen muazzam miktarda yöntem nedeniyle, normal bir prosedür yaklaşımından çok farklı değildir. İnsanlar çok hızlı OOP yapmaya başladığında yapılması kolay bir hata.


3
Bazı OOP kodunu çok daha kafa karıştırıcı buluyorum .. örneğin prestashop'un göbeğine bakmayı deneyin.
AndrewC

Pretashop hakkında harika bir nokta. Magento'nun kendisi dumanı tüten bir canavar, ancak onunla kalmaya karar verdik çünkü Pretashop veya WooComm gibi alternatifler daha da kötü.
PKHunter

7

İkisini de öğrenmelisiniz. Nesneler, varoluştaki birçok olası soyutlamadan sadece biridir ve soyutlama, programlamanın nihai olarak ilgili olduğu şeydir. Bununla birlikte, yordamsal şeyler ile başlayın ve sonra nesneleri daha sonra ekleyin, çünkü PHP nesnelerinin içi zaten yordamsaldır.

Çerçevelere gelince; önce dilin temellerini öğrenin, kullanıp kullanabileceğiniz deneysel programlar yazın vb. Daha sonra çerçeveler tanımak ve düşünebiliriz kendini olmadığını size bazı bağlamda bazıları yararlı buluyorum. Kesinlikle zorunlu değiller.


6

Yukarıdaki harika cevapları eklemek için. OOP'yi, kodlama stilinizin doğal bir ilerlemesi olarak görmelisiniz - küçük bir program yazmaya başladığınızda, sadece birkaç satırlık php kodunu bir araya getirmeniz, ardından bunları işlevler halinde gruplandırmanız ve yazdığınız daha fazla işlevle ihtiyaç duyabilirsiniz. onları sınıflar halinde daha iyi organize etmek için. OOP, kodlarınızı daha iyi yapılandırmanıza izin verin - daha iyi bir kod bakımına izin verin.


6

Prosedürel php ve oop aynı php kodunu kullanır. O zaman tek fark, prosedürle ilgili olarak tek bir göreve odaklanmanız ve o kadar. Oop'ta kodunuzu, kodun birçok farklı alanında yeniden kullanılabilen kalıplar veya parçalar kullanarak düzenlersiniz.

Basit cevap, php'yi bilmeniz ve anlamanız gerektiğidir. Bunu php.net'te öğrenebilirsiniz. Bunu anladıktan sonra, kodunuzu aynalar halinde düzenlemeye başlayabilirsiniz.

Prosedürel kod, fonksiyonları ve değişkenleri kullanır.

Bir şeylere alıştıktan sonra, işlevleri ve değişkenleri sınıflar halinde düzenlemeye başlayabilirsiniz. Fonksiyonları yöntem olarak ve değişkenleri özellikler olarak adlandırmaya başlarız.

İyi şanslar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.