我有一个问题我已经花了很长时间了。我正在构建一个包含两个主要类的模板引擎
Template.php
Tag.php
Img.php
和
String.php
.
程序的工作原理如下:
模板对象创建标记对象。每个标记对象决定要实现哪个扩展类(img、string等)。
重点
wrap('div'),
addClass('slideshow')
每个
Img或字符串类
用于呈现特定于所需内容的代码,因此
$Img->render()
<img src='blah.jpg' />
我的问题是:
封装
标签.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();
}
function __construct(Tag $T) {
$args = $T->getArgs();
$T->addClass('img');
}
function render() {
return '<img src="blah.jpg" />';
}
$T = new Tag("img", array(...);
$T->render();
.... 或者我应该创造更多的
继承
结构,因为“Img是一个标记”
标签.php
public static create($namespace, $args) {
// Sort out namespace to determine which extension to call
return new $namespace($args);
}
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" />';
}
}
$Img = Tag::create('img', array(...));
$Img->render();
我需要的一件事是创建自定义标记的通用接口,即我可以实例化Img(…),然后实例化String(…),我确实需要使用Tag实例化每个扩展。
同样为了澄清一下:Tag类具有所有扩展类通用的功能,Tag类中不应该有任何需要在扩展类中实现的方法。只提供helper标记函数。
谢谢!
马特·穆勒