Если вы хотите иметь возможность кэшировать ваши динамически созданные классы, вы можете записать в файл и потребовать его вместо этого. Это можно считать одинаково хакерским, но это вариант. Для классов, которые создаются один раз и используются часто, это может быть хорошим решением. Для классов, которые должны быть динамическими каждый раз, придерживаться eval, вероятно, лучшее решение.
$proxyClassOnDisk = '/path/to/proxyCodeCache/' . $clazz .'.cachedProxyClass';
if ( ! file_exists($proxyClassOnDisk) ) {
// Generate the proxy and put it into the proxy class on disk.
file_put_contents($proxyClassOnDisk, $this->generateProxy($object));
}
require_once($proxyClassOnDisk);
В этом примере идея заключается в том, что вы создаете динамические прокси для класса $object
. $this->generateProxy($object)
вернет строку, которая более или менее похожа на то, как $extension
выглядит в исходном вопросе.
Это ни в коем случае не полная реализация, просто некоторый псевдокод, чтобы показать то, что я описываю.