teh_noob. Dinle beni. Ben burada yazarak yaşıyorum bu sözleri. Onları söylüyorum taklit ve ağzımdan çıkan kelimeleri duymak. Hayır NO NO NO NO NO em> Ve hayır, ben bunu düşünüyorum ne kadar "cool" bir sıçan popo vermeyin.
Bu "yanlış" şeyler bu yaklaşım hakkında "doğru" şeyler listesine kısa olacak bu talihsiz senaryolardan biridir. Demek ki, sorunlarınızı numerous. söyleniyor, ben only some bu fikir hakkında kötü şeylerin üzerine gitmek için gidiyorum geldiğini.
İlk olarak, sadece genel olarak OOP konuşalım. Burada ne yapıyorsun hiç görmek benim en sevdiğim şey: I "dersleri ile programlama" dediğimiz. Bu bir sınıf anahtar kelime kullanıldığından, OOP kılığında yapısal programlamayı söylemektir. Bunu yapacaksın, zahmet yok. Sadece işlevlerini kullanabilirsiniz. Bu sınıf kötüye sade ve basittir.
Sınıflar nesne blueprints.Objects kapsüllenmesine kendilerini borç ve instantiation vardır. Eğer gerçekten Singleton pattern hayranı değilseniz, neden açıkça sadece bir kez örneği için tasarlanmış bir sınıf oluşturmak? Eğer söylemeden önce "Ama Peter, Singleton Desen! 1one bize yardımcı olur" aslında not all that great olduğunu anlamaya çalışın. Ayrıca, burada ne yaptığınızı bile insanların ilk etapta Singleton deseni dönüp bir neden değildir.
Ikinci alt sınıflarından konudur. Belki gelecekte bir noktada sizin siteniz için bazı açılan sayfaları isteyeceksiniz. Yoksa sadece CSS-odaklı daha vardır sadece baskı sürümleri isteyeceksiniz. Belki de bir RSS beslemesi gibi tüm HTML değil bir şey isteyeceksiniz. Şimdi ne olacak? Ne kadar bu kurucu uzayıp gidiyor other iş bu yeni sayfa türleri çalışmak için çoğaltmak zorunda olacak? Ama zaten tek tek sayfaları oluşturmak için alt sınıflara güvenerek ne başladım eğer? Şimdi mahvolduk. Tabii, geri dönüp decorator pattern kanca, ama bu sorun ilk etapta olmayan aptal sınıf tasarımı ile önlenebilir zaman neden bütün bu çalışmaları ile gidebilirsiniz?
Üçüncü olarak, ilk etapta HTML yankılanan fikirdir. Ben, orada burada bir etiket ya da üç sözcük ya da iki echo ile iyiyim. Ama büyük bir HTML parçaları için, sadece aptallık. Çıkış moduna kaçmak ve bir dize kilitli değil HTML kullanmak edep var. Sadece daha kolay düzenlemek ve aslında bir WYSIWYG onunla çalışabilir, okumayı çok arzu gerektiğidir.
Dördüncü olarak, bu kötü, badly SRP keser.
Beşinci - saçma tasarım bu tür Burada çözmeye çalışıyoruz sorunların çok türüne yol açar. Sadece çözüm yapıcınızdan yankı ifadeleri kaldırmak olduğunu bilmek istemiyorum. Bunun etrafında bir yolu var mı? Tabii. Aslında, bir daha da var. Ben bunların hiçbirini tavsiye edersiniz? Hayır, gerçekten değil.
Son olarak, başlıklarını konuşalım. Belki henüz onlar hakkında öğrenmiş değil. Belki var ve umurumda değil. Ama şimdi ne itibaren 6 ay, bir sorun üzerinde çalışıyoruz ve derin yığını içinde 10 çağrı var ve basit bir header()
function çözecek gerçekleştirmek bir yöntem içinde çalışırken, ne olacak senin sorun. Belki önbellek ayarını yapmak gerekir veya elle yanıt kodu ayarlamak gerekir - ne olursa olsun. Ama ne, sen yapamazsın sanırım. Neden? Aptal yapıcı tarayıcısı oluşturulduktan milisaniye için çıktılar çünkü.
Yani, Özetle: NO! Unless your actual, ultimate goal is to see some of your very on handiwork on The Daily WTF.
Ne Uyaran yanında sunabilir? Yeni bir yöne belki parçası? Peki, hata ayıklama çıktısı iyi inşa edilmiş sistemlerde yeterince zor, bu yüzden örtülü yapar ayak kendinizi çekim tarafından başlatılmaz. Sistem tüm çıkış olmalıdır explicit. Eğer sınıf bir "sayfa" türünü yapmak istiyorsanız, bu iyi. Sadece that. gibi yapmayın
class foo
{
protected $title;
protected $headers;
public function setTitle( $title )
{
$this->title = $title;
}
public function addHeader( $header )
{
$this->headers[] = $header;
}
public function sendHeaders()
{
foreach ( $this->headers as $header )
{
header( $header );
}
}
public function printPageHeader()
{
$this->sendHeaders();
?>
<html>
<head>
<title><?php echo $this->title; ?></title>
</head>
<body>
<?php
}
public function printPageFooter()
{
?>
</body>
</html>
<?php
}
public function printPage()
{
$this->printPageHeader();
$this->printPageFooter();
}
}
$p = new foo;
$p->setTitle( 'Just Testing' );
$p->addHeader( 'Cache-control: no-cache' );
$p->printPage();