多数大学生出来选择的工作和专业无关
首页 > 专业知识

使用PHP内置SOAP要点分析

时间:2018-04-02 17:52:01 [来源]:郑州PHP培训学校

   使用PHP内置SOAP要点分析

  PHP内置SOAP虽然已经不是非常流行了,但是某些程序员在处理代码编程的时候,还会偶尔的用上。我们今天就来向大家详细介绍有关PHP内置SOAP的用法。
  对于刚刚接触PHP语言的新手来说,对于PHP内置SOAP可能还是了解的不太多。PHP内置SOAP已经是属于OUT范畴的技术了,不过因为历史原因,时不时还是会用到它,以前都是用NuSOAP,现在准备试试PHP内置的SOAP扩展。
  由于文本只打算说说客户端的用法,所以得先找一些能直接用的服务端,Xmethods提供了一些有趣的选择,这里选择其中的Map IP Address to Country服务,功能很简单,就是提供一个IP地址,然后返回国家名称。
  先创建一个client实例:
  $client = new SoapClient
  (’http://www.ecubicle.net/
  iptocountry.asmx?wsdl’,
  array(’trace’ => true));
  通过设置trace为true,我们可以在稍后使用__getLastRequest,__getLastRequestHeaders,__getLastResponse,__getLastResponseHeaders等方法得到一些信息,在程序调试阶段,这些信息很有用,程序投入使用时,则不必使用此参数。除了trace参数,还可以设定login和password参数以实现HTTP认证的功能,此外还有很多参数,可以参考官方文档。
  创建了前面的$client实例后,我们可以先看看服务都提供了哪些方法:
  print_r($client->__getFunctions());
  服务方法的信息细节可以从wsdl里自己查阅,下面看看PHP内置SOAP怎么调用一个实际的方法,$ip=’64.156.132.140′:
  $result = $client->__soapCall
  (’FindCountryAsString’, array
  (’FindCountryAsString’ =>
  array(’V4IPAddress’ => $ip)));
  print_r($result->
  FindCountryAsStringResult);
  还可以这样调用:
  $result = $client->
  FindCountryAsString(array
  (’V4IPAddress’ => $ip));
  print_r($result->
  FindCountryAsStringResult);
  PHP内置SOAP还可以这样调用:
  $params = new SoapParam(array(’V4IPAddress’
  => $ip), ‘FindCountryAsStringSoapIn’);
  $result = $client->__soapCall
  (’FindCountryAsString’, array($params));print_r($result->FindCountryAsStringResult);还可以这样调用:
  $params = new SoapParam(array(’V4IPAddress’
  => $ip), ‘FindCountryAsStringSoapIn’);
  $result = $client->FindCountryAsString($params);print_r($result->FindCountryAsStringResult);在使用PHP内置SOAP时,参数如何传递有点不好说明,这需要研读wsdl描述文档,不过看wsdl实在是一件无趣的事情,所以我觉得你可以先大概看一下wsdl,然后凭感觉去尝试传递参数,其中配合trace调试,一般来说,试几次就能找到正确的传递方式,如果还不行,再通过__getLastRequest,__getLastRequestHeaders等方法提供的信息配合wsdl描述文档仔细研究。
  详细解读PHP类的封装
  我们在这篇文章中主要为大家介绍了PHP类的封装的相关知识。希望新手们通过本文介绍的内容能够加深对PHP语言的理解程度。
  PHP类的封装对于初学者来说是比较难懂的,在我们学习这方面的知识之前,首先要讲到的是PHP中的public、protected与private修饰符,可能在之前的代码中你已经见识过public这个修饰符,但是我们还并不懂这其public:方法或者属性在任何作用域都可以访问到,而且这是默认的,如果没有为一个属性或方法指定访问修饰符,它将是public。
  protected:方法或者属性只能从类或者继承类的一个成员中访问到。
  private:方法或者属性只能从类的一个成员中访问到,而且无法从继承类的成员中访问到。经过private标记的方法或者属性可以在继承类中重新定义。每一个类只能看到它自己定义的私有方法。
  这三个修饰符从作用范围上来讲应该像这样从大到小排序:
  public→protected→private之所以说是在作用范围上是因为类跟我们之前的函数一样,把一些属性和方法进行了PHP类的封装。这个封装就决定了数据的“可见性”了,这样我们在类的外面不能够随意修改所定义的属性和方法而只能够进行调用,这就是封装的好处,同时也提高了安全性。为了说明这几个修饰符的作用,请看如下代码:
  < ?php
  class myClass{
  public $public="Public";
  protected $protected="Protected";
  private $private="Private";
  function say_Hello(){
  //我现在什么也不做,等下再告诉你
  }
  }
  $obj=new myClass();
  echo $obj->public;
  //echo $obj->protected;
  //echo $obj->private;
  ?>
  < ?php
  class myClass{
  public $public="Public";
  protected $protected="Protected";
  private $private="Private";
  function say_Hello(){
  //我现在什么也不做,等下再告诉你
  }
  }
  $obj=new myClass();
  echo $obj->public;
  //echo $obj->protected;
  //echo $obj->private;
  ?>
  通过运行以上示例我们得到一个“Public”,但当你把//echo $obj->private;的注释去掉时,你会得到一下如下的错误:Fatal error: Cannot access protected property myClass::$protected in E:\apache\htdocs\example\file.php on line 13。
  可以看到我们不能随意去访问类的属性定义,也就是我们不能去修改PHP类的封装中已经定义的一些操作,这就是可见性了。我们在“外面”是不知道这个类中到底有那些成员,因为这些成员对于其他的类可能是不可见的。
  当然如果我们一定要访问或者修改定义为“私有”的属性时,也可以使用PHP所提供的系统方法:_get()和_set()。关于这个在以后再来了解,因为现在我对此也只是有个了解啦。
  PHP搜索数组的实现方法介绍
  我们在文章中列出了一些PHP搜索数组的函数,比如在数组的头部添加元素的函数;在数组尾部添加元素的函数以及在数组头部删除元素的函数等等。
  PHP语言中的数组应用是一个需要不断学习的知识点。首先我们要知道如何进行PHP搜索数组,得知道你所搜索的是一个数组,而不是其他的数据结构,可以使用is_array()来检测我们所要搜索的数组类型。另外还有几个函数需要提一下,这是在PHP中数组赋值和销毁所没有提到的,以下是一个列表。
  array_unshift() //在数组的头部添加元素,也就是把一个新的元素插入到数组,相应索引还自动改变array_push() //在数组尾部添加元素
  array_shift() //在数组头部删除元素
  array_pop() //在数组尾部删除元素
  这几个函数的用法基本差不多,在PHP的帮助手册中可以得到具体的用法,在此就不多啰嗦了。
  PHP搜索数组的代码示例:
  in_array()函数在数组中搜索一个特定的值,如果找到则返回TRUE,否则返回FALSE。以下的示例来自PHP帮助手册。
  < ?php
  $os = array("Mac", "NT", "Irix", "Linux");if (in_array("Irix", $os)) {
  echo "Got Irix";
  }
  if (in_array("mac", $os)) {
  echo "Got mac";
  }
  ?>
  要特别说明的,in_array()在搜索时是区分大小的,所以以上的例子只会返回“Got Irix”。你也可以用数组作为子串在数组中进行搜索,更多的实例请查看帮助手册。
  PHP搜索数组之搜索关联数组
  如果你搜索的数组是一个关联数组,就要使用array_key_exists(),其返回值跟in_array()一样。同样我们引用PHP帮助手册的例子来说明:
  < ?php
  $search_array = array('first' => 1, 'second' => 4);if (array_key_exists('first', $search_array)) {echo "The 'first' element is in the array";}
  ?>
  相信这么一段代码就不要解释了吧,一看就能够明白,其结果:The ‘first’ element is in the array。这说明”first”存在于数组”search_array”中。
 

上一篇:概论为什么PHP全局变量不能生效

下一篇:正确理解PHP抽象类应用