我有一个用于管理数据库的类。在这个类中,我定义了连接,并且我有各种函数用于不同类型的提取/检索数据。
我通常有一个用于ajax操作的php文件,通过我包含带有我需要的函数的文件,我作为变量传递给我的类的实例这些函数。
然后我在函数中使用该实例来进行查询并从数据库中获取数据。
我的问题是:我是否需要在包含函数的文件中包含类声明? 结构如下......或多或少。基本上我需要在functionCollection.php中包含databaseClass.php
databaseClass.php
<?php
class MyDBManager
{
private $database = 'db';
private $host = 'host';
private $username = 'siteguest';
private $password = 'psw';
private $options = array();
...
function __construct(){}
function runQuery($statement){}
function fetchRow(){}
...
}
?>
livesearch.php
<?php
include_once("databaseClass.php");
include_once("something.php");
$var1 = $_POST['id'];
$var2 = $_POST['date'];
$var3 = $_POST['time'];
$database = new MyDBManager();
somefunction($database, $var1, $var2, $var3);
...
?>
functionCollection.php
<?php
include_once("databaseClass.php");
include_once("misc.php");
function nameExists($database, $var1, $var2, $var2){}
...
?>
答案 0 :(得分:0)
不,包含类定义的文件必须在任何地方正确加载一次。一旦加载了文件并且解析了类定义,它就可以在任何地方使用。
答案 1 :(得分:0)
PHP自动加载旨在防止这个确切的问题。当您尝试实例化一个类时,PHP将尝试在抛出异常之前自动加载该类。
在自动加载之前,我们必须包含所有类文件。从PHP文档:
在PHP 5中,不再需要这样做。你可以定义一个__autoload() 在您尝试使用a时自动调用的函数 尚未定义的类/接口。通过调用此 函数脚本引擎有一个加载类的最后机会 在PHP因错误而失败之前。
但是,有一个更好的选项spl_autoload_register
允许您注册多个自动加载器,这些自动加载器将逐个执行,直到找不到类,然后抛出异常。
PHP现在有一个名为PSR-0 Standard
的标准,并附带PHP对命名空间的支持。
你应该阅读这篇文章,它给出了一个breif历史,并解释了如何实现自己的自动加载器。 http://phpmaster.com/autoloading-and-the-psr-0-standard/
如果你有时间看一些真实世界的自动装载机来了解更多信息,例如Yii或Symfony的框架自动装载机。