我正在尝试用 PHP 开发一个可以生成 JS“类”的系统,并且我有一个可以工作的实现。我遇到的问题围绕着这些 JS 类的多个包含;我的代码每次需要时都会打印出 JS 类,我希望它只在第一次打印出来。
我目前对这个问题的解决方案是不优雅的;它要求 PHP 类开发人员显式调用一个函数,该函数将检查 JS 类是否已包含在内。例如:
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() 将始终返回类层次结构中最低的类的类名,因为它是该函数的最新覆盖版本。
如果父类正在调用 getJSClass(),我需要它能够检查 jsClassName() 中的类名是否已包含在内。但它不能是 jsClassName() 的版本已被最低类覆盖,它需要是父类中定义的版本。
有没有办法访问函数的“当前”类的版本?当前,我的意思是定义当前函数的类。这样,当我们向上移动 parent:: 链时, jsClassName 将反映有问题的类名。