0

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

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

2 回答 2

0

PHP 自动加载旨在防止这个确切的问题。当您尝试实例化一个类时,PHP 将在抛出异常之前尝试自动加载该类。

在自动加载之前,我们必须包含我们所有的类文件。来自 PHP 文档:

在 PHP 5 中,这不再是必需的。您可以定义一个自动调用的 __autoload() 函数,以防您尝试使用尚未定义的类/接口。通过调用此函数,脚本引擎在 PHP 因错误而失败之前获得了最后一次加载类的机会。

但是,有一个更好的选择spl_autoload_register允许您注册多个自动加载器,这些自动加载器将一个一个地执行,直到找不到该类,然后将引发异常。

现在有一个 PHP 标准被称为PSR-0 Standard并伴随着 PHP 对命名空间的支持。

你应该阅读这篇文章,它提供了一个简短的历史并解释了如何实现你自己的自动加载器。http://phpmaster.com/autoloading-and-the-psr-0-standard/

如果你有时间看看一些真实世界的自动加载器来了解更多,例如 Yii 或 Symfony 的框架自动加载器。

于 2013-06-10T10:52:05.147 回答
0

不,包含类定义的文件必须在任何地方只加载一次。一旦文件被加载并且类定义被解析,它就可以在任何地方使用。

于 2013-06-10T10:44:30.317 回答