Когда мы включаем файлы в PHP, они как-то кэшируются. Итак, если один содержит определение класса, когда мы пытаемся включить его дважды, мы получим сообщение об ошибке «Can not redeclare class».
Но возможно ли получить код включаемого файла, вызванный с областью действия, установленной для текущей функции, скажем?
например. если у нас есть два файла:
moo.php
<?php
class Moo
{
function __construct()
{
echo "hello, world!" . PHP_EOL;
}
}
?>
main.php
<?php
function foo()
{
include("moo.php");
new Moo();
}
foo();
new Moo(); // <-- here should be an error saying "could not find class Moo"
include("moo.php");
new Moo(); // <-- and here should not
?>
Насколько я пытался, ни eval(file_get_contents("moo.php"));
, ни пространства имен не дали ожидаемого эффекта с наименьшим количеством кода ...