繁体   English   中英

如何在没有Composer的情况下自动加载PHP名称空间?

[英]How to autoload PHP namespaces without Composer?

我正在尝试使用此库: 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存储库并创建以下代码来使用此库:

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

您可以添加具有vcs类型的自定义存储库,并且无论如何都可以使用Composer安装此库,即使Packagist不提供该存储库也是如此:

{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/wunderio/docebo-php"
        }
    ],
    "require": {
        "wunder/docebo-php": "dev-master"
    }
}

Composer将克隆此存储库并直接从中获取元数据。

请注意, vcs类型应比package类型少一些问题,而package类型有一些限制,并且仅在其他所有方法均失败时才应使用。

不清楚您使用的是任何框架还是仅使用纯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');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM