首页 > 解决方案 > 如何在没有 Composer 的情况下自动加载 PHP 命名空间?

问题描述

我正在尝试使用这个库: https ://github.com/wunderio/docebo-php

但是,尽管它在页面上列出了 Composer 命令,但在 Composer 中找不到它。

Docebo如示例所示,如何调用此库并创建该类的新实例?

use Docebo\Docebo;

try {
  $docebo = new Docebo('base_url', 'client_id', 'client_secret', 'username', 'password');
} catch (Exception $e) {
  echo $e->getMessage();
}

我试图通过克隆 github repo 来使用这个库,并创建以下内容:

docebo-php/src$ cat test.php
<?php
require_once("Docebo/Docebo.php");

use Docebo\Docebo;

try {
  $docebo = new Docebo('base_url', 'client_id', 'client_secret', 'username', 'password');
} catch (Exception $e) {
  echo $e->getMessage();
}
?>

这只会导致:

$ php test.php
PHP Fatal error:  Interface 'Docebo\DoceboInterface' not found in /var/www/www/htdocs/docebo-php/src/Docebo/Docebo.php on line 18

标签: phpcomposer-php

解决方案


目前尚不清楚您使用的是任何框架还是只是简单的 PHP 代码。

我的解决方案是纯 PHP 代码:

您可以编写自己的 PHP 自动加载器来包含以下库:

function __autoload($class_name)
{
    //class directories
    $directorys = array(
        '/Controllers/',
        '/Libraries/',
    );

    //for each directory
    $ds = "/"; //Directory Seperator
    $dir = dirname(__FILE__); //Get Current file path
    $windir = "\\"; //Windows Directory Seperator
    $path = str_replace($windir, $ds, $dir);

    foreach($directorys as $directory)
    {
        //see if the file exsists
        if(file_exists( $path . $directory . $class_name . '.php'))
        {
            require_once( $path . $directory . $class_name . '.php');
            //only require the class once, so quit after to save effort (if you got more, then name them something else
            return;
        }
    }
}

将它作为 autoload.php 存储在您的项目根目录中,然后在您拥有的任何 PHP 文件之上使用它:

require_once('autoload.php');

推荐阅读