PHP包括从文件加载器对象没有保持变量
首先我将解释我正在尝试做什么,我正在研究一个php路由器试验他们如何工作,并在一个对象我instanciating路由器对象和我可以创建路线没有问题。PHP包括从文件加载器对象没有保持变量
现在我正在尝试一些更复杂的事情,我希望能够从文件夹中包含的文件中加载路由,该文件夹名为路由,我不会提前知道文件名。这里仍然没有问题,很简单。
做了我的包容,我想,为什么要将include包含在对象中,我应该创建一个àfileLoader对象,它将专用于递归加载文件夹中的文件。我做了,做了一个新的东西。
现在,当调用我的加载器对象时,应该设置的$ router变量不是,我不能创建路由,因为未定义的变量。一些代码的解释。
这是调用路由器对象的函数:
private function projectRooting(){
$router = new Router\Router($this->baseUri);
$fileLoader = new FileLoader();
$fileLoader -> loadFolder($this->fullDirName, "/routes");
// include_once($this->fullDirName."/routes/web.php");
$router->run();
}
这是从fileLoader功能:
public function loadFolder(string $path, string $directory){
$theDirectory = $path. "/" .$directory;
$files = scandir($theDirectory);
foreach($files as $file){
if(is_file($theDirectory. "/" .$file))
include_once($theDirectory. "/" .$file);
else{
if($file != "." && $file != "..")
$this->loadFolder($path, $directory. "/" .$file);
}
}
}
从包含文件的路由例如:
$router->get("/", function(){echo "Welcome on the home page!";});
现在使用未注释的代码,它不起作用,但如果我评论$ fileLoader部分并取消注释clude_once,一切都会重新开始。
当我从另一个对象调用包含作品的方式时,我是否遗漏了某些东西?
如果您回复,请提前致谢,对不起我的英文不好。
我认为你有范围问题,你的$route
变量不能在包含文件内部访问。尝试使用全局变量的作用域:
private function projectRooting(){
global $router;
$router = new Router\Router($this->baseUri);
...
然后,你的包含文件中把它
global $router;
$router->get("/", function(){echo "Welcome on the home page!";});
它可能必须的作品,现在,为什么只是include_once作品?
的问题是loadFolder
功能,当你把它叫做include_once
这里面函数没有提及$router
变量,这意味着如果你粘贴所有loadFolder
里面的内容projectRooting
函数,那么它可能会工作。
另一种解决方法是将$router
通过参数传递给loadFolder
函数。
谢谢,我今天晚上会测试一下。我想过将$路由器变量传递给loadFolder,但我希望它能够在任何地方加载文件(大多数情况下使用全局变量,因此包括作品)。我想我会用全球测试它,并尝试其他的东西。 –
我用全局测试它,它的工作原理,所以我会花一些时间来看看,如果我可以做不同的事情。 –
所以'$ router-> run();'似乎对你没有定义?你得到一些错误? – deFreitas
Nop,$ router-> run()工作正常。不起作用的是由loadFolder include调用的另一个文件中的$ route-> get方法。 –