我希望将外部文件包含为类主体,如下所示:
//$key is alphanumeric
$className='_Module_'.$key;
if(!class_exists($className))
{
eval(' class '.$className.' extends ModuleContext');
{
...include the file here...
}
}
eval('$instance=new '.$className.'();');
这就是我想要的:
//$key is alphanumeric
$className='_Module_'.$key;
if(!class_exists($className))
{
//There's got to be a better way to do this
$contents=rtrim(ltrim(trim(file_get_contents($fileName.'.php',true)),'<?php'),'?>');
//All on one line to preserve line numbering for errors
eval(' class '.$className.' extends ModuleContext{ '.$contents.' }');
}
eval('$instance=new '.$className.'();');
我不喜欢使用eval来包含整个文件,因为它会生成令人困惑的错误消息:
PHP Fatal error: Call to undefined function doFoo() in test/test.php(57) : eval()'d code on line 7
我在其他帖子中读过eval()代码没有利用php加速器。 此外,它需要一些修剪来删除'&lt;?php'和'?&gt;'标签,因为它们在类定义中不能很好地工作。
包含的文件需要对熟悉PHP但不是面向对象编程的人“友好” - 它将有一些预定义的函数由模块实现者填写。
有没有办法做到这一点,不使用eval作为包含?
答案 0 :(得分:2)
如果我理解你的话,理想情况下你会扩展你的课程,而不是试图为你的班级评估一个机构:
class ClassA {
public function greet( $msg ) {
echo $msg;
}
}
class ClassB extends ClassA {
public function wave( $times ) {
echo sprintf("Waves %s times!", $times);
}
}
$instance = new ClassB();
$instance->greet("Hello World");
$instance->wave("five");
请注意我如何构建我的课程,为其“正文”添加新的功能和属性。
答案 1 :(得分:0)
非使用短开标签可能会出现问题吗?