Sınıflar.

13 Cevap php

PHP OOP için oldukça yeni, ben temel bir komut çift ama etkileyici bir şey yaptık. Ben gerçekten ondan aldım tüm muhtemelen sadece bir fonksiyonları toplama ve include bunları yapmak daha kolay olacaktır olduğunu.

Sınıfların yapısı, sadece aksi takdirde basit bir süreç oldu şaşırtmak gibi görünüyor. Ve bir sınıf içine her şeyi harmanlanması gerçekten herhangi bir işlevsellik eklemek değildir.

Yani açıkça bir şey eksik. Birisi sınıflar oluşturarak eklenir ne işlevselliği açıklar mısınız

13 Cevap

Sınıflar onlar data and methods saklanması için kullanılır (sırasıyla ve programlama ve analizi) nesne yönelimli tasarım, bir kavramı vardır.

Diğer nesne yönelimli programlama teknikleri gibi özellikleri içerebilir

  • bilgi gizleme,
  • veri soyutlama,
  • kapsülleme,
  • modülerlik,
  • polimorfizmi ve
  • miras

Bir makale .. top-15-best-practices-for-writing-super-readable-code:

Nesne yönelimli programlama, iyi yapılandırılmış kod oluşturmanıza yardımcı olabilir. Ama bu tamamen prosedürel programlama terk etmek gerekir anlamına gelmez. Aslında her iki stilleri bir karışım oluşturarak iyi olabilir.

Dan http://java.sun.com/docs/books/tutorial/java/concepts/class.html:

Gerçek dünyada, genellikle hepsi aynı türde birçok bireysel nesneleri bulacaksınız. Aynı marka ve model tüm varlığı diğer binlerce bisikleti olabilir. Her bisiklet planlar aynı set inşa ve bu nedenle aynı bileşenleri içerir edildi. Nesne yönelimli açısından, biz bisiklet bisiklet olarak bilinen nesne sınıfının bir örneği olduğunu söylüyorlar. A sınıfı tek tek nesneler oluşturulduğu plandır.

Son olarak, bir youtube video usul ve nesne yönelimli programlama paradigması arasındaki farklar hakkında kısa ...

Ilk başta sadece bir dizi fonksiyon kullanımı basit bakmak ve onları dahil olsa da, sınıflar kendi güçlü noktaları var. Sınıflar değişkenleri saklayabilir ve bu değişkenler vardır "sonra."

İşte php.net den düzenlenmiş bir örnek

<?php
$item_name = 'Widget 22';
$item_price = 4.90;
$item_qty = 2;
$item_total = ($item_price * $item_qty);
echo "You ordered $item_qty $item_name @ \$$item_price for a total of: \$$item_total.";
?>

v.s:

<?php
class Item {
  protected $name, $price, $qty, $total;

  function __construct($name, $price) {
    $this->name = $name;
    $this->price = $price;
  }

  function calculate($qty) {
    $this->total = number_format(($this->price * $qty), 2);
  }

  public function __toString() {
    return "You ordered ($this->qty) '$this->name'" . ($this->qty == 1 ? "" : "s") .
    " at \$$this->price, for a total of: \$$this->total.";
  }
}

$widget22 = new Item("Widget 22", 4.90);

$widget22->calculate(2);

echo $widget22;
?>

Başka büyük yararı bunlardan daha yapabilir olmasıdır. Başka bir öğenin fiyatını hesaplamak ve yazdırmak istiyorsanız söyleyin. Bunun yerine tüm fantezi mantığı çoğaltmak zorunda kalmadan, sadece yeni Öğe arayabilirler yapılabilir.

OOP için büyük bir avantajı kod yeniden olduğunu. Bir örnek: Bir çok düşük düzeyde bir sunucu ile iletişim kuran bir genel "Socket" sınıfını, tasarım deyin. Sonra, ben gelip ben bir FTP sunucusuna bağlı iken bir kullanıcı dosyaları indirmek için izin veren bir FTP sınıfı, yazmak istiyorum karar verebilir. Ben senin Socket sınıfını "alt sınıf" ve kodu yeniden yazmadan, FTP desteği için işlevselliğini uzatabilirsiniz.

Şimdi, John HTTP sunucuları ile etkileşim, bir HTTP sınıf yazmak istediğini söylüyor. O da, düşük seviyeli yuva kodu yeniden yazmadan, bunu gerçekleştirmek için Socket sınıfını alt sınıf.

Bu örnekte soket kod hiçbir çoğaltılması yoktu nasıl dikkat edin; ben ve John hem de paylaştı. Çoğaltılamaz kodunda bir hata varsa, aynı hata kodunuzu başka bir yerde oluşabilir ve siz bunun farkında olmayabilir, çünkü Kod tekrarından kötü.

Sınıflar hakkında daha ayrıntılı bilgi bulunabilir Wikipedia.

Sınıflar programları düzenlemek için bir yol vardır. Sınıflar bize daha yüksek bir ayrıntı bakımından onlar hakkında ikna etmeye izin vererek programların karmaşıklığı azaltarak, bizim programlama dünyasında gerçek dünyada varlıkları, ya da eserler temsil etmek için kullanılabilir.

Bu uzmanlar onların etki alanı hakkında daha kolay ve hızlı bir nedenle izin vermek için "yığın" haline bilgiye düzenlemek bu psikoloji iyi bilinmektedir. Sınıflar bize programlar hakkında daha kolay ve hızlı bir nedenle izin verir.

Buna ek olarak, sınıflar birlikte gruba birlikte doğal olarak bu varlık ile ilişkili yöntemler / prosedürleri / fonksiyonlar / operasyonları ile bir varlık hakkında bilgi sahibi olmamızı sağlar. Yine, bu programlarda bilgiyi düzenlemek için doğal bir yol sağlar.

Orada böyle bir miras gibi sınıflar, diğer avantajları vardır, ama öncelikle sınıflar karmaşıklığını azaltmak için program yapısını organize bir bilişsel yoludur.

Ben tam olarak aynı şeyi düşündüm.

Birkaç OO-PHP kitap, benim en sevdiğim varlık PHP In Action okudum.

Ben "Hey, bu çok faydalı ve ilginç bilgiler." Düşünce kitap okurken, ben OO-PHP önemli miktarda kullanmak için henüz rağmen.

Sunucusundan bilgi alma ve geri JSON-ing gibi basit ihtiyaçlarını gerçekten OOP ihtiyacım yok. Im emin "En İyi Uygulama", ama birçok insanın ihtiyaçları için pratik değildir. Veritabanı bağlantısı, ve benzeri veri işleme gibi birkaç sınıfları, gerçek zamanlı koruyucular olabilir, ama PHP sadece kısmen OO kullanılacak bazen daha kolay ve hızlıdır.

Sadece bir coupl ay geri sınıfları hakkında benzer sorular ilanıyla iyi Sonunda karar verdim, dediğim gibi, ben şimdi birkaç yıl için PHP kullanıyorum ve ben gerçekten sınıfları kullanmak için bir ihtiyaç görmedim, onlar sadece basit bir süreç karmaşık Sınıf trende atlamak için ve ben hala öğreniyorum ama ben şimdi bunları kullanarak rahatım ve WOW ben şimdi onlar hakkında düşünme tamamen zıt bir yol var, ben şimdi PHP iyi özelliği olduğunu düşünüyorum!

Ben, küçük bir uygulama için overkill olabilir itiraf edecek ama benim gibi büyük bir sosyal ağ sitesi uzakta küçük geliyorsa, yüzlerce dosya var ve şimdi sınıflar üzerinde dönüştürme ediyorum o şimdi çok daha iyi yapılandırılmış ve inşa easiar edilir, update , benim kod yönetmek ve diğer kullanıcıların sınıfları kullanır şimdi çok daha iyi benim bütün site gelip anlayabilirdim. Başka büyük özelliği size ayrı sınıf dosyalarına sahip ve sınıf gereken sadece doğru dosyayı yüklemek auto özdevinimli_yükle () işlevini kullanın olabilecek tüm bu işlevleri kadar zarar verebilir mi, bu çok büyük bir proje üzerinde harika. Sınıflar oyun şeyler daha fişi olun.

Bütün söyleyebileceğim bu bunu GERÇEK faydalarını görmek için dalmak için gereken şeylerden biri tür olduğunu.

Web sitenizin küçük ise kesinlikle (ki sizin basit bir süreç denir ne) prosedürel programlama kod kolay olurdu. Web siteniz büyüdükçe Ama, kesinlikle şeyleri sıralamak gerekir.

Örneğin, veritabanına varlıklar için şablon olarak hareket etmek sınıfları gerekir. Her sayfayı temsil etmek için sınıflar gerekebilir, ve tek bir dosyada birden fazla sayfa oluşturabilirsiniz. Bu nedenle, bu OOP tüm avantajları vardır.

Başka bir örnekte, fonksiyonları üzerinde 40 gibi var. Birlikte grup onları isterim. Statik yöntemler kesinlikle yardımcı olacaktır gibi bir sınıfta onları koymak. Geri aynı kod geldiğinde gelecekte, her şey size tanıdık görünüyor böylece şeyleri temizlemek gerekir.

I always thought the same thing until I started using classes--realizing that it is so much simpler and better. You should create those functions that you're mentioning, but gather them all within a class. The functions can then within a class share the same variables, and therefore making it simpler when having to use the same functions multiple times.

Iyi örnek ben şimdi bir veritabanına bağlanıyor ile gelebilir.

Bunun yerine bağlamak bireysel fonksiyonları olan, sonuç alma ve bir class içinde tüm bu işlevleri sarın bağlantıyı kapatmadan, bir sorgu gönderir. Bu sayfada özel kullanım için tasarlanmış değişkenler yükler yapmak zorunda kalmadan, aynı işlevleri kullanarak veritabanına birden çok kez iletişim olanağı sağlayacak.

Sadece usul tarzı fonksiyonları yazıyorsanız o zaman OOP yararları çok almak için gidiyoruz değil bir sınıfa araya tokat onları. Bence Open Closed Principle ve Dependency Inversion Principle Eğer bilerek koduna onları tasarım sürece alışkanlık olsun hangi OOP büyük yararlarından bazıları açıklanmaktadır.

OOP mükemmel olsa da, her şeyi uygun değildir. Ben prosedürel programlama, web geliştirme için de uygun olduğunu düşünüyorum. Bu son derece usul iştir HTML, bir grup içine (oldukça) basit bir istek dönüştürülmesini içerir. Birkaç fonksiyonları eklemek basit ise, bir prosedürden şeklindeki deliğe bir cepten şeklinde blok kıpırdamak çalışırken hiçbir nokta yoktur. Ancak, web sitesi çok karmaşık olsaydı cepten daha iyi bir seçenek olacağını düşünün.

Karmaşıklığı yönetmek için.

Edit: Belki biraz daha ayrıntılı shopuld.

Programlar karmaşık varlıklardır ve birçok yolu onların karmaşıklığı ehlileştirmek için tarihsel önerilmiştir.

Usul programlama, fonksiyonlar, yapısal programlama, soyut veri tipleri ve nesne yönelimli programlama bir programın anlamak için gerekli zihinsel çaba yönetmenize yardımcı olmak için sadece modellerdir.

Nesne programlama her şeyi çözmez ve kesinlikle küçük bir komut dosyası için overkill, ancak büyük uygulamalar veya sistemleri için harika çalışıyor.

Benim asıl cevabı koskocaman Code Complete kitabın tam içeriğini özetlemeye çalışır: karmaşıklığı yönetmek ve sizin ve ardılları için programlar anlaşılır kılmak için elinizden geleni yapın. Eğer bu nesne programlama Bu görevi size yardımcı olacağını düşünüyorum eğer o harika, ama onun kolaylık soru ve daha iyi yollar bulmaya çalışın bu daha da iyidir.

PHP, sınıflar, en azından, size include tabloların bir demet kaydedebilirsiniz. __autoload() fonksiyonunun tembel yükleme çok kullanışlı. Ayrıca, farklı fonksiyon isimleri olmaz çatışmayı içeren emin olabilirsiniz.

Bunun ötesine gitmek için, bir sınıf etrafında bir API oluşturma düşünmeye başlayabilirsiniz. Sınıf içinde yalnızca diğer fonksiyonlar tarafından gerekli fonksiyonlar işaretlenmiş olabilir private. Ve sonunda, sizin sınıflarda gerçek kodu görmezden ve sadece API çağrıları olarak düşünmek gerekir.

Ben ararsam Do::stuff($a, $b) Ben bu tepkiyi almak.

Ve bilmeniz gereken herşey. Bunu sınıf içinde "başlık altında" nasıl unutabilirim.

Ve sonra, tabii ki, statik olmayan fonksiyonları ile sınıfları var. Bunlar normal fonksiyonlarını yapamaz, çeşitli ilginç şeyler yapabilirsiniz.