Class neo4jphp:无法实例化抽象类Everyman\Neo4j\Transport
也许是一个简单的问题,但对我来说,作为Neo4j的首发选手,这是一个障碍。我将neo4jphp with composer安装在与我的应用程序相同的目录中。供应商子文件夹已创建,下面的everyman/neo4j文件夹可用。对于第一个测试,我使用了以下示例中的代码片段:Class neo4jphp:无法实例化抽象类Everyman\Neo4j\Transport,class,neo4j,autoload,neo4jphp,Class,Neo4j,Autoload,Neo4jphp,也许是一个简单的问题,但对我来说,作为Neo4j的首发选手,这是一个障碍。我将neo4jphp with composer安装在与我的应用程序相同的目录中。供应商子文件夹已创建,下面的everyman/neo4j文件夹可用。对于第一个测试,我使用了以下示例中的代码片段: spl_autoload_register(function ($className) { $libPath = 'vendor\\'; $classFile = $className.'.php'; $cla
spl_autoload_register(function ($className) {
$libPath = 'vendor\\';
$classFile = $className.'.php';
$classPath = $libPath.$classFile;
if (file_exists($classPath)) {
require($classPath);
}
});
require('vendor/autoload.php');
use everyman\Neo4j\Client,
everyman\Neo4j\Transport;
$client = new Client(new Transport('localhost', 7474));
print_r($client->getServerInfo());
我总是纠结于这个错误
致命错误:无法实例化抽象类Everyman\Neo4j\Transport
谷歌给我带来了乔什·阿德尔的评论
您不能实例化Everyman\Neo4j\Transport,因为它是一个抽象类。您必须根据需要实例化Everyman\Neo4j\Transport\Curl或Everyman\Neo4j\Transport\Stream
所以我想我只需要将use语句修改为
use everyman\Neo4j\Client,
everyman\Neo4j\Transport\Curl;
但调试表明,这不起作用,自动加载器只能得到“Transport.php”而不是“everyman\Neo4j\Transport\Curl.php”。对于“Client.php”,它仍在工作(“vendor\everyman\Neo4j\Client.php”),因此我猜测use语句是错误的,或者代码无法处理额外的子文件夹结构
使用
要求('phar://neo4jphp.phar');
作品不错,但我读到这是不赞成的,应该由作曲家/自动加载取代
任何人都有改变的暗示,或者有相同的问题
谢谢你抽出时间,
巴拉尔。。。我只是尝试一下,似乎在use语句和类实例化中不需要Transport类。这似乎有效:
require('vendor/autoload.php');
use everyman\Neo4j\Client;
$client = new Client();
print_r($client->getServerInfo());
也适用于具有专用服务器/端口:
$client = new Everyman\Neo4j\Client('localhost', 7474);
如果您有更多的意见,我将很高兴了解更多-谢谢,所有的意见和想法都非常感谢
BalaelCurl是默认传输。如果希望使用Stream而不是Curl,则只需实例化自己的传输对象。如果您确实想实例化自己的Curl传输,那么对现有代码最简单的更改就是将use语句修改为:
use everyman\Neo4j\Client,
everyman\Neo4j\Transport\Curl as Transport;
此外,如果您使用的是Composer软件包,则无需注册自己的自动加载功能
vendor/autoload.php
可以帮你做到这一点。谢谢Josh,我试过了,但似乎我还是被困在了某个地方。我可以使用默认的卷曲,因此我将代码缩减为
require('vendor/autoload.php');
use everyman\Neo4j\Client;
$client = new Everyman\Neo4j\Client('localhost', 7474);
print_r($client->getServerInfo());`
文件夹结构是main(以下是文件和composer.json及其内容)
{
"require": {
"everyman/Neo4j": "dev-master"
}
}
在子文件夹“vendor”中有“autoload.php”和子文件夹everyman以及相关内容
Fatal error: Class 'Everyman\Neo4j\Client' not found
当我有自动加载功能时不会发生这种情况。我想我在这里犯了一个错误-你能给我一个提示吗?
非常感谢,B啊,似乎我的作曲设置不正确,我已经重新设置了,现在工作正常。