我是否需要在每个文件中包含我的PHP类

时间:2013-06-10 10:37:17

标签: php class

我有一个用于管理数据库的类。在这个类中,我定义了连接,并且我有各种函数用于不同类型的提取/检索数据。

我通常有一个用于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){}
    ...
?>

2 个答案:

答案 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的框架自动装载机。