【问题标题】:Using a library in php: class not found在 php 中使用库:找不到类
【发布时间】:2018-07-27 20:07:36
【问题描述】:

我正在尝试使用这个库:https://github.com/duzun/hQuery.php

我的项目是这样安排的:

BetCompare
  Application
    Teams
      file_using_the_library.php
      hQueryLib
        hquery.php

这就是我在我的 php 文件中使用它的方式:

namespace BetCompare\Application\Teams;
use BetCompare\Application\Teams\hQueryLib\hquery;

hQuery::$cache_path = "/path/to/cache";

这会返回错误Class not found。在对此事进行了一些研究后,我已经尝试过:

namespace BetCompare\Application\Teams;
use BetCompare\Application\Teams\hQueryLib\hquery;
include_once 'hQueryLib/hquery.php';

hQuery::$cache_path = "/path/to/cache";

那么错误如下:Cannot declare class hQuery_Context, because the name is already in use。我不明白,第二个错误使它看起来use 已经足够并加载了类。但是我不能使用它...我做错了什么?

我也尝试过只使用include_once,但它不起作用。

【问题讨论】:

    标签: php namespaces include


    【解决方案1】:

    像这样(使用命名空间duzun\hQuery):

    <?php
    
    namespace BetCompare\Application\Teams;
    
    use duzun\hQuery;
    
    include_once 'hQueryLib/hquery.php';
    hQuery::$cache_path = "/path/to/cache";
    

    或者像这样,没有命名空间:

    <?php
    
    namespace BetCompare\Application\Teams;
    
    include_once 'hQueryLib/hquery.php';
    \hQuery::$cache_path = "/path/to/cache";
    

    你的代码不能工作,因为如果你写

    use BetCompare\Application\Teams\hQueryLib\hQuery;
    

    您实际上是在假设 hQuery 类具有命名空间定义

    namespace BetCompare\Application\Teams\hQueryLib;
    

    它没有(作为第三方类)。

    duzun\hQuery 的部分在hQuery.php 文件的最后几行中定义并在文档中进行了描述。

    【讨论】:

    • 哦,我明白了,现在可以了!非常感谢您的解释。
    • 不客气。实际上,如果您阅读答案中的附加文本,您会发现它们以动态方式为类提供命名空间,使用class_alias()。这很不幸,因为您必须事先有文档,或者知道这些行的作用。
    猜你喜欢
    • 1970-01-01
    • 2019-11-19
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 2011-12-05
    • 1970-01-01
    相关资源
    最近更新 更多