删除第一个“\&引用;在Thrift生成的PHP文件上的类名处
当我使用Thrift生成没有名称空间的PHP文件时(我想在后面给出名称空间),如下所示:删除第一个“\&引用;在Thrift生成的PHP文件上的类名处,php,namespaces,thrift,Php,Namespaces,Thrift,当我使用Thrift生成没有名称空间的PHP文件时(我想在后面给出名称空间),如下所示: //namespace php tutorial //don't use namspace service Calculator { void ping(); } Thrift将创建一个Calculator.php: namespace ; //error but no problem, i will give namespace after interface CalculatorI
//namespace php tutorial //don't use namspace
service Calculator {
void ping();
}
Thrift将创建一个Calculator.php:
namespace ; //error but no problem, i will give namespace after
interface CalculatorIf {
public function ping();
}
//problem at "\CalculatorIf"
class CalculatorClient implements \CalculatorIf {
//thrift code ...
}
问题是“”\CalculatorIf“,这意味着\CalculatorIf属于根命名空间(或无命名空间),当我想给出一个新命名空间(如“namespace MyNS;”)时,它将出错,因为\CalculatorIf不属于我的新命名空间。如果生成了“CalculatorIf”(不带“\”),我将更改名称空间以解决此问题。有很多地方都一样,太可怕了
我希望它与下面相同:
namespace ;
interface CalculatorIf {
public function ping();
}
//this is "CalculatorIf" and not "\CalculatorIf"
class CalculatorClient implements CalculatorIf {
//thrift code ...
}
PHP生成提供了许多选项,这些选项向您展示了:
php (PHP):
inlined: Generate PHP inlined files
server: Generate PHP server stubs
oop: Generate PHP with object oriented subclasses
rest: Generate PHP REST processors
nsglobal=NAME: Set global namespace
validate: Generate PHP validator methods
因此,解决方案是调用Thrift编译器,如下所示:
thrift -gen php:nsglobal=wtf yourfile.thrift
导致
interface CalculatorIf extends \wtf\SharedServiceIf {
所以你没有按预期使用工具,然后抱怨结果?这就是你所说的吗?不,当我将thrift文件生成为java文件(或其他文件)时,它工作正常。因为这些语言在名称空间或类名之前没有“\”。只有PHP使用“\”来指定根命名空间,Thrift总是默认地将“\”添加到类头路径中(可能,对于编译器过程来说很容易)。我只想删除“\”,或者无论如何,帮助file.php中的所有类是相对使用的(由其他类使用),而不是绝对使用的。是的,但这就是。您的问题完全源于随后更改名称空间的方法。你想这么做-好的。但是你有责任正确地做这件事,没有其他人。或者您使用我的答案中建议的方法,这也应该会产生预期的结果。感谢您的帮助,我已经尝试过了,但这还没有解决我的问题(它仍然在类路径的开头添加“\”\wtf\sharedservicecif”-这是绝对类路径)。但是,我可以改变我的工作方法,使用你提供的。PS:我想生成一个文件,我可以移动任何地方重命名“名称空间”只。但是,现在,我必须重命名(删除“\”)很多东西。“我想生成一个可以移动到任何地方的文件”-您可以随时调用thrift编译器,使用您想要的任意多个不同的
nsglobal=
。肯定比手动编辑文件快。好的,我会的。当“类在侧名称空间中相对使用,但它们使用绝对路径”时,我感到不舒服