如何加载PHP类?

时间:2013-12-09 21:54:03

标签: php postgresql pomm

我使用Pomm 1.1.4并且无法加载该类。 Here it says Fatal error: Class 'Pomm\Connection\Database' not found in /users/ilhanna/public_html/api/v1/Pomm-1.1.4/Pomm/Service.php on line 38第38行没有任何内容,只是评论。我加载类的代码是

require_once 'Pomm-1.1.4/Pomm/Service.php';
# Using the constructor
$service = new Pomm\Service(array(
  'db_one' => array(
    'dsn' => 'pgsql://username:password@localhost:5432/databasename'
  )
  ));

我想错了。

2 个答案:

答案 0 :(得分:1)

您的Service.php文件包含具有两个其他类依赖项的类Service。错误是针对缺少的Database类。

  namespace Pomm;

  use Pomm\Connection\Database; // Error line (class missing) 
  use Pomm\Exception\Exception;

在创建服务实例之前,还需要加载这些类。如果文件与服务类位于同一目录中;你可以在之前加入它们。

require_once 'Pomm-1.1.4/Pomm/Datebase.php';
require_once 'Pomm-1.1.4/Pomm/Exception.php';
require_once 'Pomm-1.1.4/Pomm/Service.php';

$service = new Pomm\Service(array(
  'db_one' => array(
    'dsn' => 'pgsql://username:password@localhost:5432/databasename'
  )
));

更好的解决方案是研究PHP auto-loading;如果投影的话,可能是package manager such as Composer

答案 1 :(得分:1)

我建议您使用composer安装Pomm并获得自动加载器。从packagist

下载composer.phar

像这样创建一个composer.json文件:

{
"require": {
    "pomm/pomm": "~1.1"
  }
}

并执行phar以安装Pomm。只需在index.php中添加以下代码

即可
$loader = require __DIR__."/vendors/autoload.php";

如果您无法使用composer,请创建自己的自动加载机制:

spl_autoload_register(function ($class) {
    if (0 === strpos($class, 'Pomm\\')) {
        $class = str_replace('\\', '/', $class);
        require sprintf("%s/%s.php", __DIR__, $class);
}

在你的index.php文件的最开始,它应该运行正常。