Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MVC文件连接出现问题_Php - Fatal编程技术网

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

我正在尝试创建一个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($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'));