classmap004.phpt 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. --TEST--
  2. SOAP Classmap 4: encoding of objects with __get()
  3. --EXTENSIONS--
  4. soap
  5. --FILE--
  6. <?php
  7. ini_set("soap.wsdl_cache_enabled",0);
  8. class A {
  9. public $a;
  10. function __construct($a){
  11. $this->x = $a;
  12. }
  13. function __get($name) {
  14. return @$this->a[$name];
  15. }
  16. function __set($name, $val) {
  17. $this->a[$name] = $val;
  18. }
  19. function __unset($name) {
  20. unset($this->a[$name]);
  21. }
  22. }
  23. class B extends A {
  24. function __construct($a){
  25. parent::__construct($a);
  26. $this->y = $a + 1;
  27. }
  28. }
  29. function f(){
  30. return new B(5);
  31. }
  32. class LocalSoapClient extends SoapClient {
  33. function __construct($wsdl, $options) {
  34. parent::__construct($wsdl, $options);
  35. $this->server = new SoapServer($wsdl, $options);
  36. $this->server->addFunction("f");
  37. }
  38. function __doRequest($request, $location, $action, $version, $one_way = 0): ?string {
  39. ob_start();
  40. $this->server->handle($request);
  41. $response = ob_get_contents();
  42. ob_end_clean();
  43. return $response;
  44. }
  45. }
  46. $client = new LocalSoapClient(__DIR__."/classmap003.wsdl",
  47. array('classmap'=>array('A'=>'A','B'=>'B')));
  48. print_r($client->f());
  49. ?>
  50. --EXPECT--
  51. B Object
  52. (
  53. [a] => Array
  54. (
  55. [x] => 5
  56. [y] => 6
  57. )
  58. )