PHP MVC文件连接出现问题
我正在尝试创建一个PHP MVC应用程序,它的文件结构如下 在PHP MVC文件连接出现问题,php,Php,我正在尝试创建一个PHP MVC应用程序,它的文件结构如下 在init.php中,我有 <?php include('app/Database.php'); include('app/models/m_template.php'); include('app/models/m_categories.php'); $Database = new Database(); $Template = new Template(); $Categories = new Categories($Da
init.php
中,我有
<?php
include('app/Database.php');
include('app/models/m_template.php');
include('app/models/m_categories.php');
$Database = new Database();
$Template = new Template();
$Categories = new Categories($Database);
在m_vcategories.php中,我有Categoty()类,如
class Categories {
function __construct() {}
public function test(){
echo 'This is Test';
}
在index.php中,我有
<?php
include 'app/init.php';
$Template->load('app/views/v_home.php');
我得到以下错误
您能告诉我发生这种情况的原因吗?
$Categories
超出了加载
方法的范围,这也意味着它超出了加载
方法正文中包含的任何文件的范围
以下是一个解决方案,可用于解决此问题:
// Add a $variables parameter to your load method.
public function load($url, $title = '', $variables=NULL)
{
if( is_array($variables) )
{
foreach( $variables as $key => $item )
{
$$key = $item;
}
}
if ($title != '') { $this->set_data('page_title', $title); }
include($url);
}
然后使用如下加载方法:
<?php
include 'app/init.php';
$Template->load('app/views/v_home.php', '', array('Categories' => $Categories);
变量类别在v_home范围内不可用,要实现这一点,您需要向模板类添加新参数-在加载方法中并提取该变量的内容,如下所示
public function load($url, $title = '',$data = array())
{
extract($data);
if ($title != '') { $this->set_data('page_title', $title); }
include($url);
}
然后在index.php中可以执行此操作
<?php
include 'app/init.php';
$Template->load('app/views/v_home.php','',array('Categories' => $Categories));
在模板加载方法中包含v_home.php。在此上下文中,您无法访问$Categories。此变量未在方法加载中定义。作为一个快速而肮脏的修复,你可以在你的加载方法中将$Categories设置为global,它应该可以工作。谢谢你的评论。我按照你说的更新了代码,但仍然得到了相同的结果error@Behseini对不起,这是个错误。现在已修复,我忘记在$url和$variables之间添加“”。如果你现在尝试,应该可以很好地工作。再次感谢lshas,你能让我知道这个方法到底在做什么吗?!我添加的代码允许您通过load的第三个参数传递变量。这应该是一个关联数组,其中变量名作为键,其值作为项。这将使通过的所有变量在load methods作用域中可用。感谢Solaiman,但我仍然收到此错误注意:未定义变量:第2行的C:\wamp\www\project1\app\views\v_home.php中的类别和致命错误:调用成员函数测试()在C:\wamp\www\project1\app\views\v_home.php第2行的非对象上
很抱歉,我忘了传递标题,我现在已经编辑了它。检查一下
public function load($url, $title = '',$data = array())
{
extract($data);
if ($title != '') { $this->set_data('page_title', $title); }
include($url);
}
<?php
include 'app/init.php';
$Template->load('app/views/v_home.php','',array('Categories' => $Categories));
<?php
include 'app/init.php';
$Template->load('app/views/v_home.php','',compact('Categories'));