PHP-类';HbaseClient';即使包含,也找不到

PHP-类';HbaseClient';即使包含,也找不到,php,hbase,thrift,thrift-protocol,Php,Hbase,Thrift,Thrift Protocol,这件事让我挠头好一阵子了。我刚刚开始使用PHP/Thrift与HBase通信(我可以用Python很好地完成)。由于某些原因,下面的代码生成的类“HbaseClient”在$client=新行中找不到: $GLOBALS['THRIFT_ROOT'] = 'thrift'; require_once( $GLOBALS['THRIFT_ROOT'] . '/Thrift.php' ); require_once( $GLOBALS['THRIFT_ROOT'] . '/transport/TSo

这件事让我挠头好一阵子了。我刚刚开始使用PHP/Thrift与HBase通信(我可以用Python很好地完成)。由于某些原因,下面的代码生成的类“HbaseClient”在$client=新行中找不到:

$GLOBALS['THRIFT_ROOT'] = 'thrift';
require_once( $GLOBALS['THRIFT_ROOT'] . '/Thrift.php' );
require_once( $GLOBALS['THRIFT_ROOT'] . '/transport/TSocket.php' );
require_once( $GLOBALS['THRIFT_ROOT'] . '/transport/TBufferedTransport.php' );
require_once( $GLOBALS['THRIFT_ROOT'] . '/protocol/TBinaryProtocol.php' );
require_once( $GLOBALS['THRIFT_ROOT'] . '/Hbase/Hbase.php' );

try
{
    $socket = new TSocket('127.0.0.1', 9090);
    $transport = new TBufferedTransport($socket, 1024, 1024);
    $protocol = new TBinaryProtocolAccelerated($transport);
    $client = new HbaseClient( $protocol );
    $transport->open();
}
catch (Exception $e)
{
    echo "Exception: %e\r\n";
}
我真的不知道为什么。在Hbase.php include文件中,客户机定义如下:

class HbaseClient implements \Hbase\HbaseIf {
我是不是错过了一些非常简单的东西?(此处为HBase.php全文:)


提前谢谢

您确定已将HBase文件夹放在THRIFT_根目录下或外部吗?

我认为这是名称空间问题。试着放:

namespace Hbase;
在实例化对象的文件中,使用完全限定名:

$client = new Hbase\HbaseClient( $protocol );

是的,如果我没有(在require行上),这不会引发另一个错误吗?您是否更改了下载包的目录结构?根据thrift with hbase客户端页面上的示例,代码应该是:
$GLOBALS['thrift_ROOT']=dirname(_文件)。/thrift/src'此外,是否显示require_once错误取决于系统上启用的错误报告级别。这两种方法都可以工作,但不应像第一种解决方案那样劫持名称空间,而是应导入:
使用Hbase