我遇到了php和OOP的问题
我试图创建一个对象,并在对象内部尝试从mysql加载数据。
我的文件是这样构建的
HTML
|_php
|__对象
|_内容
对象文件夹中是对象文件"Event"。在php文件夹中的脚本中创建的对象和整个脚本都是从内容中的html文件中调用的。
我的问题是,我从不同的位置使用对象。include_one方法不起作用。
event.php:
<?php
include_once(ROOT.'php/db.inc.php');
class Pb1_event
{
public $ev1_id;
// do something
}
我还用includeonce('./../db.inc.php);进行了尝试;。我应该如何包括它?将它包含在这个文件中是一个好方法,还是应该将它包含到其他任何地方?
首先,我要做的是使用__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';
}
}
使用__FILE__
或__DIR__
魔术常数:
include_once(dirname(__FILE__) . '/../db.inc.php');
include_once(__DIR__ . '/../db.inc.php');
我的建议是在脚本的开头使用spl_autoload_register()
:注册一个自动加载器
spl_autoload_register(function ($className) {
include 'path/to/php/objects/' . $className . '.php';
});
当你想实例化一个对象时,无论你在哪里,你只需要做:
$myclass = new MyClass();
自动加载器将加载正确的类。您所需要考虑的就是像调用类一样调用"对象"中的文件。示例:
class Pb1_event {
}
filename:路径/to/php/objects/Pb1_event.php
您可以尝试以下警告:
include_once($_SERVER["DOCUMENT_ROOT"].'/php/db.inc.php');