Ben uzunca bir süre üzerinde emekçi olan bir sorum var. I Img.php
ve String.php
gibi uzantılı sınıfların bir grup ile, iki ana sınıfları Template.php
ve Tag.php
ile çiftleşmiş motoru inşa ediyorum.
The program works like this:
Bir Şablon nesnesi Tag nesneleri oluşturur. Her bir etiket nesnesi uygulamak için hangi uzatma sınıf (img, string, vb) belirler.
Tag class gibi her bir uzatma sınıf için yardımcı fonksiyonları sağlamak için wrap('div'),
addClass('slideshow')
, vb nokta
Her Img or String class gerekli olana özel kodu işlemek için kullanılır, bu yüzden $Img->render()
gibi bir şey vermek istiyorum <img src='blah.jpg' />
My Question is:
Gerektiği şöyle Etiket nesne içindeki I encapsulate tüm uzatma işlevsellik:
Tag.php
function __construct($namespace, $args) {
// Sort out namespace to determine which extension to call
$this->extension = new $namespace($this); // Pass in Tag object so it can be used within extension
return $this; // Tag object
}
function render() {
return $this->extension->render();
}
Img.php
function __construct(Tag $T) {
$args = $T->getArgs();
$T->addClass('img');
}
function render() {
return '<img src="blah.jpg" />';
}
Usage:
$T = new Tag("img", array(...);
$T->render();
"Img bir etiket olan" çünkü .... ya da ben bir inheritance yapısının daha oluşturmanız gerekir
Tag.php
public static create($namespace, $args) {
// Sort out namespace to determine which extension to call
return new $namespace($args);
}
Img.php
class Img extends Tag {
function __construct($args) {
// Determine namespace then call create tag
$T = parent::__construct($namespace, $args);
}
function render() {
return '<img src="blah.jpg" />';
}
}
Usage:
$Img = Tag::create('img', array(...));
$Img->render();
Ben ihtiyacım var tek şey özel etiketler oluşturmak için ortak bir arayüz, yani I (...) IMG örneğini daha sonra String (...) örneğini, ben Tag kullanarak her uzantısı örneğini gerekiyor.
EDIT: Ayrıca sadece açıklama için: Etiket sınıfı tüm uzatma sınıfları için ortak özelliğe sahiptir, uzatma sınıflarında uygulanması gereken Tag sınıfında herhangi bir yöntemleri var olmamalıdır. Etiket sınıfı yalnızca yardımcı fonksiyonları sağlar.
Ben bu sorunun biraz belirsiz olduğunu biliyorum, sana biraz geçmişte bu ele ve her tasarım deseni seçimi ile ilgili belirli konuların öngörebiliriz umuyorum. Eğer başka önerileriniz varsa onları duymak isterim.
Thanks! Matt Mueller