tars2php 使用说明

    如下是我们对基本类型的映射:

    当我们需要标识具体的变量类型的时候,就需要用到这些基本的类型了,这些类型都是常量,从1-14。

    1. 它同时具有两个成员函数pushBack()和push_back()
    2. 入参为取决于vector本身是包含什么类型的数组
    3. 例如:
    4. $shorts = ["test1","test2"];
    5. $vector = new \TARS_VECTOR(\TARS::STRING); //定义一个string类型的vector
    6. foreach ($shorts as $short) {
    7. $vector->pushBack($short); //依次吧test1,test2两个元素,压入vector中
    8. }

    map:

    1. map => \TARS_MAP
    2. 它同时具有两个成员函数pushBack()和push_back()
    3. 入参为取决于map本身包含什么类型
    4. 例如:
    5. $strings = [["test1"=>1],["test2"=>2]];
    6. $map = new \TARS_MAP(\TARS::STRING,\TARS::INT64); //定义一个key为string,value是int64的map
    7. foreach ($strings as $string) {
    8. $map->pushBack($string); //依次把两个元素压入map中,注意pushBack接收一个array,且array只有一个元素
    9. }

    struct:

    1. 准备一份tars协议文件,例如example.tars
    2. 编写一个tars.proto.php文件,这是用来生成代码的配置文件。
    1. return array(
    2. 'appName' => 'PHPTest', //tars服务servant name 的第一部分
    3. 'serverName' => 'PHPServer', //tars服务servant name 的第二部分
    4. 'withServant' => true,//决定是服务端,还是客户端的自动生成
    5. 'tarsFiles' => array(
    6. './example.tars' //tars文件的地址
    7. ),
    8. 'dstPath' => './server/', //生成php文件的位置
    9. 'namespacePrefix' => 'Server\servant', //生成php文件的命名空间前缀
    10. );
    1. 执行php ./tars2php.php ./tars.proto.php
    2. 工具会根据servant name自动生成三级目录结构,demo中会在./server目录下生成PHPTest/PHPServer/obj/目录,obj目录下的classers是struct对应的php对象,tars目录是tars协议文件本身 。

    如example.tars中的struct:

    1. struct SimpleStruct {
    2. 0 require long id=0;
    3. 1 require unsigned int count=0;
    4. 2 require short page=0;
    5. };

    转变成classes/SimpleStruct.php

    1. 以example.tars中的interface部分会自动生成单独的已interface命名的php文件。 例如int testLofofTags(LotofTags tags, out LotofTags outtags);接口生成的方法如下
    1. <?php
    2. //注意生成文件中的注释部分会在server启动的时候转换为php代码,如非必要,请勿修改.
    3. //server部分具体实现需要自己继承完成,注释说明依次如下
    4. //参数为struct类型,对应$tags变量,对应的php对象在\Server\servant\PHPTest\PHPServer\obj\classes\LotofTags
    5. //参数为struct类型,对应$outtags变量,对应的php对象在\Server\servant\PHPTest\PHPServer\obj\classes\LotofTags,是输出参数
    6. //接口防止为int
    7. * @param struct $tags \Server\servant\PHPTest\PHPServer\obj\classes\LotofTags
    8. * @param struct $outtags \Server\servant\PHPTest\PHPServer\obj\classes\LotofTags =out=
    9. */
    10. public function testLofofTags(LotofTags $tags,LotofTags &$outtags);

    client部分

    1. <?php
    2. try {
    3. $requestPacket = new RequestPacket(); //构建请求包需要的参数
    4. $requestPacket->_iVersion = $this->_iVersion;
    5. $requestPacket->_funcName = __FUNCTION__;
    6. $requestPacket->_servantName = $this->_servantName;
    7. $encodeBufs = [];
    8. $__buffer = TUPAPIWrapper::putStruct("tags",1,$tags,$this->_iVersion); //打包第一个参数tags
    9. $encodeBufs['tags'] = $__buffer;
    10. $requestPacket->_encodeBufs = $encodeBufs; //在请求包中设置请求bufs
    11. $sBuffer = $this->_communicator->invoke($requestPacket,$this->_iTimeout); //发送请求包,接收返回包
    12. $ret = TUPAPIWrapper::getStruct("outtags",2,$outtags,$sBuffer,$this->_iVersion); //从返回包中解出第一个输出参数outtags
    13. return TUPAPIWrapper::getInt32("",0,$sBuffer,$this->_iVersion); //解出返回参数 返回参数 name是空,tag为0
    14. }
    15. catch (\Exception $e) {
    16. }