Я хочу включить внешний файл в качестве тела класса, что-то вроде этого:
//$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.Кроме того, требуется некоторое обрезание, чтобы удалить'тэги, поскольку они не очень хорошо работают внутри определения класса.
Включенный файл должен быть "дружественным к пользователю" для тех, кто знаком с PHP, но не для объектно-ориентированного программирования - он будет иметьнесколько предопределенных функций, которые должны быть заполнены разработчиком модуля.
Есть ли способ сделать это, не используя eval для включения?