我遇到了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;);. 我应该如何包含它?将它包含在此文件中是一种好方法,还是应该将其包含在其他任何位置?
答案 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()