我有一个我正在编写的用户身份验证系统。问题是,我不想为我想要使用该类的每个页面包含类x,y,z等。例如,这是索引页面:
///////// I would like to not have to include all these files everytime////////
include_once '../privateFiles/includes/config/config.php';
include_once CLASSES.'\GeneratePage.php';
include_once DB.'\Db.php';
include_once HELPERS.'\HelperLibraryUser.php'; //calls on user class
//////////////////////////////////////////////////////////////////////////////
$html = new GeneratePage();
$helper = new HelperLibraryUser("username","password","email");
$html->addHeader('Home Page','');
$html->addBody('homePage',
'<p>This is the main body of the page</p>'.
$helper->getUserEmail().'<br/>'.
$helper->doesUserExists());
$html->addFooter("Copyright goes here");
echo $html->getPage();
正如您所看到的,我需要在每个页面上包含一些文件,而且我添加的类越多,我必须包含的文件就越多。我该如何避免这种情况?
答案 0 :(得分:3)
您可以定义自动加载功能,例如:
function __autoload($f) { require_once "/pathtoclassdirectory/$f.php"; }
这样,当php遇到对它不知道的类的引用时,它会自动查找与该类同名的文件并加载它。
如果你需要在不同的目录中放置不同的类,你可以在这里添加一些逻辑......
答案 1 :(得分:2)
创建一个名为common.php
的文件,并将这些include语句以及此文件中每个文件中所需的任何其他函数/代码(例如数据库连接代码等)放入其中。然后在每个文件的顶部简单地执行此操作:
<?
require_once('common.php');
这将包括您的所有文件,而无需单独包含它们。
答案 2 :(得分:0)
强烈建议不要再使用__autoload()函数,因为此功能自PHP 7.2.0起已被弃用。强烈建议不要使用此功能。现在,您应该考虑使用spl_autoload_register()函数。
<?php
function my_autoloader($class) {
include 'classes/' . $class . '.class.php';
}
spl_autoload_register('my_autoloader');
// Or, using an anonymous function as of PHP 5.3.0
spl_autoload_register(function ($class) {
include 'classes/' . $class . '.class.php';
});
?>