php教程:php设计模式介绍之代理模式(2)_PHP技巧_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

php教程:php设计模式介绍之代理模式(2)

作者:黑客防线网安PHP教程基地 来源:黑客防线网安PHP教程基地 浏览次数:0

本篇关键词:模式代理教程介绍
黑客防线网安网讯:  一个简单的例子    上面的简单例子展示了代理模式的基本结构,当然我们需要一些更有趣和实际的例子。    Web服务变得非常流行,PHP5包含了一些支持的很好的协议,就如SOAP一样可以...
  一个简单的例子
  
  上面的简单例子展示了代理模式的基本结构,当然我们需要一些更有趣和实际的例子
  
  Web服务变得非常流行,PHP5包含了一些支持的很好的协议,就如SOAP一样可以很容易的理解远程服务创建SOAP客户端的部分功能是为了处理WSDL文件。然而,你可以延迟处理WSDL文件直到你需要处理这个文件的时候。席面一个代理的例子将会展示远程代理访问SOAP服务和延迟实例化。
  
  远程代理
  
  首先,基于PHP5风格,来一段创建简单的SoapClient对象的代码。你必须编译的时候加上—enable-soap选项,才能使用SoapClient类,如果你已经做过了,那么你就可以用URL形式,把WSDL文件传入构造器来创建SoapClient实例:
  
  //PHP5
  
  $client=newSoapClient(
  
  ‘http://live。capescience。com/wsdl/GlobalWeather。wsdl’);
  
  注:PHP4风格的SoapClients
  
  在你编码PHP4风格的SOAP客户端之前,PHP5的技术可以忽略。PHP5的SoapClient是一个扩展,所以它是原生的PHP的代码,速度更加快(译注:这里的原生PHP代码应该是原生代码,原生代码是指编译性语言编写的代码),实际上是用C语言完成解析和格式化XML信息的功能。
  
  PHP4风格SOAP库包括:
  
  •phpsoaptoolkit(http://phpsoaptoolkit.sf.net/phpsoap/),
  
  •PEAR::SOAP(http://pear.php.net/package/SOAP)
  
  •ezSOAP(http://ez.no/ez_publish/documentation/development/libraries/ez_soap)
  
  •nusoap(http://sf.net/projects/nusoap/).
  
  所有这些php4的库在处理远程信息的格式化和传递的功能是使用PHP代码实现的,并且有远程代理的例子。
  
  首先一个问题是你用什么方法让SoapClient做回应?运行var_dump(get_class_methods(get_class($client)));,你可以很容易的列举在运行时的方法。需要更加详细的例子的话,你可以参考下面的测试案例
  
  classProxyTestCaseextendsUnitTestCase{
  
  constWSDL=‘http://live.capescience.com/wsdl/GlobalWeather.wsdl’;
  
  private$client;
  
  functionsetUp(){
  
  $this->client=newSoapClient(ProxyTestCase::WSDL);
  
  }
  
  functionTestMethodsOfSoapClient(){
  
  $soap_client_methods=array(
  
  ‘__construct’,
  
  ‘__call’,
  
  ‘__soapCall’,
  
  ‘__getLastRequest’,
  
  ‘__getLastResponse’,
  
  ‘__getLastRequestHeaders’,
  
  ‘__getLastResponseHeaders’,
  
  ‘__getFunctions’,
  
  ‘__getTypes’,
  
  ‘__doRequest’);
  
  $this->assertEqual(
  
  $soap_client_methods,
  
  get_class_methods(get_class($this->client)));
  
  }
  
  }
  
  咋一看,似乎写了一个没有用的测试,难道你只是为了在任意时候显示这些信息而已?或许吧,在PHP升级的时候,这个测试放入程序进行测试对于监视你的程序会很有用,比如发现有什么方法增加了,或者是你可以发现哪些被依赖的方法被删除了,验证PHP编译的时候是否加入了SOAP选项。但必须要说的是,这个测试是极端的脆弱:其弱点就是会因为更改代码的原因,需要重构而且高度依赖函数列表的顺序。目前,虽然这个测试描述了SoapClient如何工作,如果你想要放一个类似的测试进行测试,最好还是重构它,用in_array函数来明确的寻找你需要测试的函数。你可以使用SoapClient::__getFunctions()方法很容易的了解指定的SOAP提供什么服务。在GlobalWeather.wsdl的案例,你可以按照下面方法做:
  
  classProxyTestCaseextendsUnitTestCase{
  
  functionTestSoapFunctions(){
  
  $globalweather_functions=array(
  
  TheProxyPattern195
  
  ‘StationgetStation(string$code)’,
  
  ‘booleanisValidCode(string$code)’,
  
  ‘ArrayOfstringlistCountries()’,
  
  ‘ArrayOfStationsearchByCode(string$code)’,
  
  ‘ArrayOfStationsearchByCountry(string$country)’,
  
  ‘ArrayOfStationsearchByName(string$name)’,
  
  ‘ArrayOfStationsearchByRegion(string$region)’,
  
  ‘WeatherReportgetWeatherReport(string$code)’
  
  );
  
  $this->assertEqual(
  
  $globalweather_functions,
  
  $this->client->__getFunctions());
  
  }
  
  }
  
  SoapClient::__getFunctions()会返回一个表示API的字符串数组给WEB服务。在每个方法中,都有返回类型,方法名,参数类型会被列出来。(建议你再次把上面那种测试方法放入程序中,已发布的web服务,如果做了变更将立即发出警告。你可以想象一下,由于API的改变产生了一个bug,天气信息忽然停止显示在你的页面,而你又没有察觉到。如果做了这类的检查,你会快速的获得因更改API而产生的警告。)
  
  
    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-17404-1.html
网站维护教程更新时间:2012-09-21 05:18:14  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer