【问题标题】:How to autoload PHP namespaces without Composer?如何在没有 Composer 的情况下自动加载 PHP 命名空间?
【发布时间】:2019-02-22 03:50:47
【问题描述】:

我正在尝试使用这个库: 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

【问题讨论】:

  • foreach( glob('Docebo/*') as $docebo ) { require $docebo; } 应该可以工作。
  • 创建一个“basecontroller”和一个“basemodel”。这些函数可以扩展,所以所有函数都会被读取。 (并使用 php 7.x)
  • @RonnieOosting 我该怎么做? ://
  • @BenM 这不起作用。 PHP 仍然以Interface 'Docebo\DoceboInterface' not found 响应。

标签: php composer-php


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以使用 vcs 类型添加自定义存储库并使用 Composer 安装此库,即使 Packagist 不提供此库:

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

    Composer 将克隆这个 repo 并直接从中获取元数据。

    请注意,vcs 类型的问题应该比package 类型的问题少,后者有一些限制,只有在其他一切都失败时才应该使用。

    【讨论】:

      猜你喜欢
      • 2013-07-28
      • 2014-05-02
      • 2016-12-08
      • 2015-02-14
      • 2020-04-10
      • 2019-01-22
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多