(codeigniter / Neo4j)PHP:名称空间和自动加载器

时间:2015-08-25 03:13:42

标签: php codeigniter neo4j namespaces autoloader

当我尝试在codeigniter(v2.2.x)中安装Neo4jPHP库时,我遇到了有关命名空间的恼人问题。我一直在寻找4个小时没有成功。

简而言之,有一个库目录,其中必须复制Neo4jPHP。所以在'libraries /'中,有一个目录'Everyman / Neo4j /',它包含所有Neo4j php类。

此外,在相同的'libraries'目录中,有一个带有自动加载器功能的类,其目的是加载Neo4j类(在'Everyman / Neo4j /'中)。

“图书馆”内部

- libraries/
     |-- Everyman/
             |-- Neo4j/
                   |-- Client.php
                   |-- some_other_classes.php
     |-- Neo4j.php

然后,在我的代码中的某个地方,在全局命名空间中,我尝试实例化类客户端:

$client = new Client();

但是我收到错误类'客户'未找到

在类客户端中,指定了以下命名空间: Everyman \ Neo4j

我必须承认我找到了2个解决此问题的方法:

从调用代码中,使用完全限定名称:

new Everyman\Neo4j\Client();

或者,在Client.php中,删除命名空间。

在这2个案例中,它有效。但是,我想将这两个条件称为客户端类:     1.我不想修改Neo4jPhp库中的任何内容。     2.我真的不想使用完全限定名称(Everyman \ Neo4j \ Client)。我想使用“new Client()”。

你们是否知道如何实现这一点(是的,我对命名空间和加载器没有非常深刻的理解)。

在Neo4j.php(带加载程序的文件)

 <?php
    class Everyman{

    public function __construct()
    {
        spl_autoload_register(array($this,'autoload'));
    }

    public function autoload($sClass){
            $sLibPath = __DIR__.DIRECTORY_SEPARATOR;
    //Below, i modified the instruction so that the class file
    //can be found. However, the class is not found.
            $sClassFile = 'Everyman'.DIRECTORY_SEPARATOR.'Neo4j'.str_replace('\\',DIRECTORY_SEPARATOR,$sClass).'.php';
            $sClassPath = $sLibPath.$sClassFile;
            if (file_exists($sClassPath)) {
                require($sClassPath);
            }
        }
    }

就是这样。我想我已经把你所有的信息都告诉了你。如果没有人可以帮助我,我将不得不使用'new Everyman \ Ne4j \ Client();' (有效)。

寻求帮助似乎很愚蠢,因为我已经找到了2个解决方法,但我真的想学习如何正确处理这个问题(如果可能的话)。

感谢。

2 个答案:

答案 0 :(得分:0)

支持的安装neo4jphp的方法是使用Composer(https://getcomposer.org/)。学习如何使用Composer是个好主意,因为可以使用它安装大量的PHP库。它还为您设置自动加载,因此您不必自己担心路径和名称空间。

如果您不想每次都写new Everyman\Neo4j\Client(),可以在脚本顶部添加use语句:use Everyman\Neo4j\Client;然后new Client();

答案 1 :(得分:0)

感谢您的回答。 出于某种原因,'使用Everyman \ Neo4j \ Client'命令不起作用,我决定不再对此问题进行进一步调查。

所以我决定坚持调用'$ client = new Everyman \ Neo4J \ Client();',而不是试图实现'$ client = new Client();'。

感谢您提出的建议。

卢瓦克。