Bence bu dosya sınıftan sonra adını her sınıf için bir dosya oluşturmak için iyidir. i chad huş biraz farklı bir gösterim kullanmak, yani bir Classname.class.php
. sınıf autoloading güzel bir özellik, ama (aynı tip sınıflar eklenir veya genellikle kaldırılır MVC gibi, sadece belirli şartlar altında) çok sık kullanmayın.
nesne modelleme ile ilgili: isimler için sınıflar oluşturmaya başlayabilirsiniz. uygulamanızda aktörleri belirlemek. Bunu yapmanın bir yöntem uygulama, mutlaka o isimler için tarama ve bu sonra sınıfları modelleme gerekiyordu ne yazmak için. Bir sınıf, tek bir nesneyi temsil olduğundan, sınıf namens çoğu zaman tekil vardır. Birden fazla nesne varsa, bunu isim olmalıdır ObjectCollection ya da bunun gibi bir şey (örneğin "BookCollection").
Bunu deneyin sağlar:
Ben kitap koleksiyonu izlemek için küçük bir kütüphane uygulaması oluşturmak istiyorum. Bu i, kendi kitapları izliyor tür, yazar (lar) ve arkadaşlar ben onları ödünç gerekir. Ayrıca, her arkadaşınız için telefon numarası saklanmalıdır, bu yüzden onu arayabilirsin. Bütün bilgiler bir veri tabanında depolanır.
- Kitap: bir kitap ("Baba", "Cryptonomicon") temsil
- Kütüphane: Kitaplar topluluğu temsil
- Koleksiyon: Zaten Kütüphanesi tarafından örtülü
- Tür ("Sci-fi", "Thriller", ...)
- Yazar ("Neal Stephenson", "Mario Puzo")
- Friend ("Joe", "Jill", "Jack")
- PhoneNumber (bir arkadaş bir özellik)
- Veritabanı (duh)
o zaman hiyerarşi oluşturmak. nesneler diğer nesneleri ihtiva eden, bunlar arasında nasıl bir ilişki benziyor?
- Kütüphanesi, 0, 1 veya daha fazla Kitapları içeriyor
- Kitap tam bir Tür aittir
- Bir Kitap 1 veya daha fazla Yazarlar tarafından yazılır
- Ben bir anda 0 veya 1 Friend ve sadece bir arkadaşınıza bir kitap ödünç olabilir
- Arkadaşını bir telefon numarası vardır
(Bu da size veritabanı gibi görünmelidir nasıl bir iki şey söyleyeceğim)
her şey açıktır. Eğer gerçekten bir telefon numarası sınıf gerekiyor? sadece bir dize var. Bu durumda, bunu bir özellik yapmak gerekir. Ayrıca telefon numaraları gerçekten (birkaç arkadaş birlikte yaşayan aynı sayıda olan ve sık sık değişir eğer mantıklı olur, ama şimdilik bu biraz abartılı olur) Friend nesneler arasında paylaşılmaz. isim bir skaler değer (bir dize, tamsayı, float) ile temsil edilebilir ve onlara bağlı diğer değerler varsa, bu sınıfları yapmak için overkill olabilir.
böylece, zamanla uygulamanızı uzatmak. Eğer telefon numarasını, ama aynı zamanda adres değil sadece saklamak için karar verdi. adres ve telefon numarası bilgileri oldukça benzer türleri vardır, bu nedenle bunu sokak, şehir, posta kodu için diğer değişkenleri eklemek. Arkadaş sınıfı özelliklerinin çok, alıcılar ve belirleyiciler-yöntemlerle, büyük büyüdü, çünkü belli bir noktada sinirli alırsınız, bazı kişiler grubuna öneki onları birlikte (Arkadaş-> addressStreet, Arkadaş> vb addressPostCode ve) . bu nedenle sadece temiz kod tutmak için, ya da İletişim (eğer Arkadaşına telefon numaranızı bırakırsanız) Adres adında bir kendi sınıfı için bu, taşınmaya (bu yanlış bir şey, ama dikkatli olmak) karar verebilir.
ne sınıf hiyerarşisi ve nesne hiyerarşisi hakkında? onları karıştırmayın, onlar tamamen farklı şeyler! benzer sınıflar bazı özellikleri paylaşır ama diğerlerinde farklı ise bir sınıf hiyerarşisi ortaya çıkar. böylece özellikleri ve yöntemleri paylaştıkları ve özellikleri ve ebeveyn yöntemlerini miras alır çocuk sınıflar ile bir sınıf oluşturmak ve aynı zamanda farklılıkları işlemek için kendi ekleyin.
in our library example, what could that be? to be honest, i can't think of anything besides one thing thats a bit nonsensical, but let's go for it ...
Friends and Authors are both Persons! both have names, phone numbers and an address. but they also differ, because authors write books and friends don't (and authors normally don't borrow your books). so you might define the name and Address-object in the Person class, but "getUnreturnedBooks()" clearly belongs to Friend while "getBooksWritten()" belongs to Author.
Eğer aynı vadede Yazarlar ve Arkadaşlar işlemek için asla çünkü gerçekten mantıklı değil. ama size Kişilerin sizin toplama üzerinde döngü ve getAddress () diyebiliriz, kitaplığınızda depolanan tüm adresleri listesini gerekli Diyelim ki. Dürüst olmak gerekirse, bir dizide birlikte istersen türleri saklamak ve istediğiniz her şekilde erişebilirsiniz bile, çünkü PHP, bu kötü bir örnek olduğunu, ancak stronly yazdığınız dilde bu mümkün değil. java bir dizi için bir veri türü tanımlamak zorunda ve onlar ortak bir miras var (ama özgün sınıf vardı yöntemlerle sınırlı konum) eğer farklı saklamak mümkündür. bu sınıf miras voodoo yeterli.
Bir nesne hiyerarşisi sadece nesneleri diğer nesneler içermelidir hangi devletler. Bir kütüphane kitap nesneleri içerir. Bir kitap bir yazar nesne içerir.
bazı ek noktalar:
açıklayıcı olmaya çalışın. "Kütüphane-> getBooks ()" Kitap nesneleri çünkü yerine, ne olsun bu isim, "Kütüphane-> retrieveValues ()" gibi isimleri kullanmayın.
bazen onlar dönmek için gidiyoruz veri türü sonra yöntemleri adına iyi bir fikirdir. onlar booleans dönerseniz o ortak. iyi adlandırmasında veya "Arkadaş-> hasBook ($ kitap)" ya da "Kitap-> isInLibraryCurrently ()" gibi "olan" "vardır" olabilir
Belirli bir sınıfın tüm nesneler için her zaman aynı değerleri sınıf sabitler olabilir. Bir kişi erkek veya kadın olabilir eğer, demek sağlar ve veritabanında "m" veya "f" olarak, bu anlamda sınıfını tanımlamak yapar saklıyorsanız Kişi sabitleri :: GENDER_MALE = 'm' ve Kişi :: GENDER_FEMALE = 'f', sen her yerde sizin sql sorguları dağınık "m" ler ve "f" ler yok yani.
Yalnızca tek bir örneğini oluşturmak Sınıflar Singletons olarak modellenmiştir olabilir. Bunun için iyi bir örnek veritabanı sınıfı olabilir - bu size hiç bir seferde birden fazla işlem açmak için gereken son derece unlikley bulunuyor. wikipedia (http://en.wikipedia.org/wiki/Singleton_pattern) de tekiz hakkında daha fazla okumak, ama biraz erken olduğunu için olabilir.
Güncelleme: Bazı insanlar onları bu şekilde uygulamak kez "taş oyma" daha fazla ya da daha az çünkü Singletons, kötü bir fikir olduğunu düşünüyorum. Eğer bir singleton olarak Veritabanı sınıfı modellemek, ama daha sonra birden fazla veritabanı bağlantısı (unlikley, ancak olası) gerek karar eğer öyleyse, bir sorun var. Eğer risk almak, singletons uygun olabilir.