แต่หลังจาก PHP 5 ซึ่งมีการเพิ่ม Soap เข้าเป็นส่วนหนึงของการพัฒนาด้วยนั้น ทำให้ชื่อของ class/function ชนกันกับของ NuSOAP ดังนั้นผู้ใช้ต้องตรวจสอบว่าถ้ามีการ compile ให้มีการรองรับ SOAP แล้วจะไม่สามารถใช้ NuSOAP Library ได้
วันนี้เรามาดูในส่วนของการใช้ Soap library ที่มีมาให้ใน PHP 5 กัน โดย class เหล่านี้ถูกเพิ่มเข้ามาตั้งแต่ PHP 5.0.1 เราสามารถสร้าง SoapClient ได้ง่ายๆดังนี้
PHP
- <?
- $client = new SoapClient("http://www.ecubicle.net/iptocountry.asmx?wsdl");
- ?>
เราสามารถใช้ตัวแปร $client ในการสื่อสารต่างๆ ได้ทันที จากตัวอย่างเป็นการสร้าง SoapClient เพื่อเรียกใช้บริการของ ecubicle ซึ่งมีบริการหาชื่อประเทศจาก IP address ต่อไปเราก็เรียกใช้บริการที่เราต้องการ
PHP
- $result = $client->__soapCall("FindCountryAsString", array("FindCountryAsStringSoapIn"=>array("V4IPAddress"=>$_SERVER['REMOTE_ADDR'])));
เราเรียกใช้ __soapCall โดยระบุ operation ที่ต้องการพร้อม parameter เป็น array ของ parameter ที่ operation นั้นๆ ต้องการ ในที่นี้ operation FinCountryAsString ต้องการ parameter ชื่อ FindCountryAsStringSoapIn โดยมีโครงสร้างตัวแปรชื่อ V4IPAddress ที่เก็บค่า IP Address เอาไว้ ทั้งนี้เรายังสามารถเรียกใช้ operation ได้อีกแบบคือ
PHP
- $params = new SoapParam(array("V4IPAddress"=>$_SERVER['REMOTE_ADDR']), "FindCountryAsStringSoapIn");
- $result = $client->FindCountryAsString($params);
วิธีการนี้จะสามารถอ่านได้ง่ายกว่า แต่เราต้องสร้าง Object SoapParam ขึ้นมาตามโครงสร้างที่ operation นั้นๆ ระบุไว้ จากนั้นเราสามารถเรียกใช้ operation แบบเรียกใช้ method ของ object client ได้ทันทีโดยส่วน SoapParam ลงไปด้วย
ผลจากการเรียกใช้งาน operation จะถูกเก็บไว้ในตัวแปร $result ซึ่งในกรณีนี้คืนค่ามาเป็นโครงสร้างของ string แจ้งชื่อประเทศ
ส่วนเพื่อป้องกันการแสดงข้อผิดพลาด เราสามารถใช้ SoapFault ในการรับผลเมื่อมีการผิดพลาดคู่กับ try{...}catch{...} ได้ เช่น
PHP
- <?
- try {
- $client = new SoapClient("http://www.ecubicle.net/iptocountry.asmx?wsdl");
- $params = new SoapParam(array("V4IPAddress"=>$_SERVER['REMOTE_ADDR']), "FindCountryAsStringSoapIn");
- $result = $client->__soapCall("FindCountryAsString", array("FindCountryAsStringSoapInss"=>array("V4IPAddress"=>$_SERVER['REMOTE_ADDR'])));
- }catch(SoapFault $ex){
- }
- ?>
การเรียกใช้ SoapClient Library ของ PHP จะสามารถทำได้รวดเร็วกว่าและไม่ต้องมีการ include NuSoap library ที่มีขนาดใหญ่ด้วย