我正在尝试用PHP开发一个可以生成JS“类”的系统,我有一个可行的实现。我遇到的问题包括多个这些JS类的包含;我的代码会在每次需要时打印出JS类,我希望它只在第一次打印出来。
我目前解决这个问题的方法并不优雅;它要求PHP类开发人员显式调用一个函数,该函数将检查是否已包含JS类。 e.g:
public function getJSClass() {
//:: Call Parent
$js = parent::getJSClass();
//:: Add Current Class
if ($this->classNeeded('SearchAndManageDataManipulator')) {
$js .= "
//|| Class: SearchAndManageDataManipulator
/**
* Base class for applications which feature a search and results control
* as the central element of the application. Such applications generally
* specialize in handling multiple records at once.
*/
function SearchAndManageDataManipulator() {
// ...
}
SearchAndManageDataManipulator.inheritsDM(WindowedDataManipulator);
";
}
//:: Return
return $js;
}
我想将此检查与类开发人员隔离开来,使其类似于以下内容:
public function getJSClass() {
return "
//|| Class: SearchAndManageDataManipulator
/**
* Base class for applications which feature a search and results control
* as the central element of the application. Such applications generally
* specialize in handling multiple records at once.
*/
function SearchAndManageDataManipulator() {
// ...
}
SearchAndManageDataManipulator.inheritsDM(WindowedDataManipulator);
";
}
所以,我想创建一个函数,如果需要该类,则调用getJSClass,以及任何父getJSClass()es;该函数将需要类的名称,以检查它是否已被包含。该类名是通过覆盖另一个函数jsClassName()来设置的;但是,调用jsClassName()将始终返回类heirarchy中最低类的类名,因为它是函数的最新重写版本。
如果父类正在调用getJSClass(),我需要它能够检查jsClassName()中的类名是否已被包含。但它不能是为最低类重写的jsClassName()版本,它必须是父类中定义的版本。
有没有办法访问函数的“当前”类版本?通过current,我的意思是定义当前函数的类。这样,当我们向上移动parent :: chain时,jsClassName将反映相关的类名。
答案 0 :(得分:1)
您可以使用数组来跟踪您的类链,只有在键jsClassName()
不存在的情况下才添加该类:
public function getJSClass()
{
$chain = parent::getJSClass();
return $chain + array(
$this->jsClassName() => "implementation here",
);
}
最顶层的实现与初始化数组略有不同:
public function getJSClass()
{
return array(
$this->jsClassName() => "implementation",
);
}