2013-04-22 91 views
0

我正在嘗試編寫用C編寫的Thrift服務器的PHP客戶端。我正在按照http://chanian.com/2010/05/13/thrift-tutorial-a-php-client/給出的教程。PHP:解析不同文件/名稱空間中的類型

我對PHP很陌生,我懷疑是缺少一些語言基礎知識。

有問題的代碼是:

<?php 
// Setup the path to the thrift library folder 
$GLOBALS['THRIFT_ROOT'] = 'Thrift'; 

// Load up all the thrift stuff 
require_once $GLOBALS['THRIFT_ROOT'].'/Thrift.php'; 
require_once $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php'; 
require_once $GLOBALS['THRIFT_ROOT'].'/transport/TSocket.php'; 
require_once $GLOBALS['THRIFT_ROOT'].'/transport/TBufferedTransport.php'; 

// Load the package that we autogenerated for this tutorial 
require_once $GLOBALS['THRIFT_ROOT'].'/packages/encabulationgame/EncabulationGame.php'; 

// Several things might go wrong 
try { 
    // Create a thrift connection (Boiler plate) 
    $socket = new TSocket('localhost', '65123'); <--error is here 

我 「上線22級 'TSocket' 在/var/www/foo/scores.php找不到」 收到錯誤

TSocket是在Thrift/transport/TSocket.php中定義。節儉/運輸/ TSocket.php文件(刪除評論)讀取:

<?php 

namespace Thrift\Transport; 

use Thrift\Transport\TTransport; 
use Thrift\Exception\TException; 
use Thrift\Exception\TTransportException; 
use Thrift\Factory\TStringFuncFactory; 

/** 
* Sockets implementation of the TTransport interface. 
* 
* @package thrift.transport 
*/ 
class TSocket extends TTransport { 

如果我我的代碼更改爲:

$socket = new Thrift\Transport\TSocket('localhost', '65123'); 

然後我的代碼(當然,這條線,至少)無再拋出一個錯誤。我很好奇:本教程的作者做了什麼以使此代碼在他的系統上工作,我沒有在我的系統上執行這些代碼?

其次,我試圖通過添加一行來解決這個問題:

use Thrift\Transport; 

我的文件之前,我創建$插座,但我預料它沒有解決不了的問題。

我該如何說服PHP解決在另一個文件中定義的這種類型? (我必須解析幾個文件中的幾種類型。)

+0

嘿,看看我的github上的java-server/php-client thrift應用程序:https://github.com/tkoomzaaskz/wealthy-laughing-duck。您可能會看到名稱空間PHP如何使用名稱空間與節儉服務器進行通信:https://github.com/tkoomzaaskz/wealthy-laughing-duck/tree/master/src/main/php – ducin 2013-04-22 12:22:36

回答

2

PHP不會導入整個名稱空間,而是您必須「使用」您希望導入的每個命名空間類。代替use Thrift\Transport;

use Thrift\Transport\TSocket; 

此進行更詳細的說明書中Using Namespaces: Aliasing/Importing下所述。這篇文章是否有可能在Thrift命名空間之前寫入?

相關問題