对象中的Include_once不起作用

时间:2015-11-30 19:10:36

标签: php oop include include-path

我遇到了php和OOP的问题 我试图创建一个对象,并在对象内部尝试从mysql加载数据。

我的文件是这样构建的。
HTML
   | _ php
| __对象
   | _ content

在对象文件夹中是对象文件"事件"。在php文件夹中的脚本中创建的对象和整个脚本从内容中的html文件调用。

我的问题是,我使用来自不同位置的对象。并且include_once方法不起作用。

event.php:

<?php
include_once(ROOT.'php/db.inc.php');

class Pb1_event
{
    public $ev1_id;
    // do something
}

我也尝试过include_once(&#39; ./../ db.inc.php&#39;);. 我应该如何包含它?将它包含在此文件中是一种好方法,还是应该将其包含在其他任何位置?

4 个答案:

答案 0 :(得分:1)

使用__FILE____DIR__魔术常数:

include_once(dirname(__FILE__) . '/../db.inc.php');
include_once(__DIR__ . '/../db.inc.php');

答案 1 :(得分:1)

首先,我要做的是使用__DIR__,或者更好的是$_SERVER['DOCUMENT_ROOT']进行绝对路径。这些常量将引用您的服务器Web根目录。假设它引用了您给我们的根目录,您可以这样做:

require_once $_SERVER['DOCUMENT_ROOT'] . '/php/db.inc.php';

但为了更好地理解,你应该echo它,看看你的目录路径如何。此外,对于“最佳实践”,您应该使用自动加载,您可以在此处阅读更多相关信息:

http://php.net/manual/en/language.oop5.autoload.php

定义自动加载功能并让它调用您需要的文件,例如,如果您需要一个名为DB的类,您的函数可能如下所示:

function __autoload($class) {
    if ($class == 'DB') {
        require_once $_SERVER['DOCUMENT_ROOT'] . '/php/db.inc.php';
    }
}

答案 2 :(得分:1)

我的建议是使用spl_autoload_register()在脚本的开头注册自动加载器:

spl_autoload_register(function ($className) {
    include 'path/to/php/objects/' . $className . '.php';
});

当你想要实例化一个对象时,无论你身在何处,你只需要这样做:

$myclass = new MyClass();

自动加载器将加载正确的类。您需要考虑的是调用“对象”中的文件与您的类相同。例如:

class Pb1_event {
}

filename:path / to / php / objects / Pb1_event.php

答案 3 :(得分:0)

你可以试试这个警告:

password_hash()