我正在尝试使用专有的mvc处理项目,我们有一个名为global.php的文件,其代码与此类似......
<?php
session_start();
require('config/config.php');
require('classes/pdo_extender.php');
require('classes/mainClass.php');
require('classes/utilities.php');
$mainClass = new mainClass;
?>
然后我们在根目录中有一个页面,其中包含以下代码
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/globals/global.php');
$mainClass->init();
?>
init函数中的代码只包含一个基于当前查看页面名称的文件......
public function init() {
$section=explode("/",$_SERVER['SCRIPT_NAME']);
$section=explode(".",$section[count($section)-1]);
include("controllers/".$section[0].".php");
}
所以说我们在root.np根目录下,它包含了global.php并调用了init函数,我不得不重新声明$ mainClass,所以它然后包含controllers / login.php但是现在我必须在这个页面上redeclare $ mainClass = new mainClass;
有没有得到它,所以init函数中包含的文件仍然可以访问global.php中设置的初始$ mainClass?
编辑:除了接受之外,我发现的另一个解决方案如下:
public function init() {
$section=explode("/",$_SERVER['SCRIPT_NAME']);
$section=explode(".",$section[count($section)-1]);
$mainClass= $this;
include("controllers/".$section[0].".php");
}
答案 0 :(得分:1)
我曾经有过这样的事情。现在的问题是该函数中包含的文件继承了函数的作用域,因此无法按照您的意愿全局访问它们。一种可能的解决方案是使用te函数来确定文件名和路径,然后以排序数组或字符串形式返回它们(如果只有一个)。然后在全局范围外执行include。
public function init() {
$section=explode("/",$_SERVER['SCRIPT_NAME']);
$section=explode(".",$section[count($section)-1]);
return "controllers/".$section[0].".php";
}
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/globals/global.php');
$file = $mainClass->init();
include($file);
// now the file is in the global include tree along with global.php
// allowing the file to have access to w/e it is you have in there.
?>