在这个问题上我已经摸不着头脑了。我刚开始使用PHP / Thrift与HBase进行通信(我可以用Python做得很好)。由于某种原因,下面的代码生成了$ client = new line上找不到的类'HbaseClient':
$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包含文件中,客户端定义如下:
class HbaseClient implements \Hbase\HbaseIf {
我在这里错过了一些简单明了的东西吗? (这里有完整的HBase.php:http://pastebin.com/6kd9r2Se)
提前致谢!
答案 0 :(得分:2)
我认为这是命名空间问题。试试看:
namespace Hbase;
实例化对象或的文件中的使用完全限定名称:
$client = new Hbase\HbaseClient( $protocol );
答案 1 :(得分:0)
您确定已将HBase文件夹放在THRIFT_ROOT目录下或外面吗?