मैं PHP के SOAPClient class का उपयोग कर एक SOAP API के साथ संचार कर रहा हूं।एसओएपी प्रतिक्रिया वस्तु से निर्माता नहीं कहा जा रहा है
The classmap option can be used to map some WSDL types to PHP classes. This option must be an array with WSDL types as keys and names of PHP classes as values.
मैं जैसे अपने ग्राहक बनाने के लिए:: विकल्पों में से एक वहाँ आप प्रकार अपने स्वयं के वर्गों के साथ WSDL फ़ाइल में निर्दिष्ट पुन: मैप की सुविधा देता है
$api = new SOAPClient('http://example.com/soap.wsdl', [
'location' => 'http://example.com/soap/endpoint',
'soap_version' => SOAP_1_2,
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
'cache_wsdl' => WSDL_CACHE_BOTH,
'classmap' => [
'APIResultObject' => 'Result'
],
# TODO: Set for debug only?
'trace' => TRUE,
'exceptions' => TRUE
]);
यह काम करता है और जब मैं $api->method('param')
कहते हैं, मैं Result
ऑब्जेक्ट वापस प्राप्त करें (केवल StdClass
ऑब्जेक्ट के बजाय)। समस्या यह है कि Result::__construct()
विधि कभी नहीं कहा जाता है, इसलिए Result
के कुछ निजी गुण कभी सेट नहीं होते हैं।
यहाँ Result
है:
Notice: Undefined property: Result::$data
मैं कैसे जब एक सोप हो रही करने के लिए निर्माता समारोह मैं की जरूरत है कॉल कर सकते हैं:
class DataClass{
protected $data;
function __construct(){
$this->data = ['a' => 0, 'b' => 1, 'c' => 2];
}
}
class Result extends DataClass{
public $value, $name, $quantity;
function __construct(array $values){
parent::__construct();
foreach(['value', 'name', 'quantity'] as $var){
$this->$var = isset($values[$var]) ? $values[$var] : NULL;
}
}
function getData(){
return $this->data[$this->name];
}
}
क्या हो रहा है मैं $api->method('param')->getData()
कर रहा हूँ और निम्न त्रुटि हो रही है प्रतिक्रिया? मैंने __wakeup()
का उपयोग करने का प्रयास किया, लेकिन ऐसा लगता है कि यह भी काम नहीं करता है।
पीएस मैंने इसे एक छोटे से कामकाज के साथ हल किया, लेकिन मुझे नहीं लगता कि यह आदर्श है। यहाँ मैं क्या किया है:
function getData(){
if($this->data === NULL){
parent::__construct();
}
return $this->data[$this->name];
}
हैलो, im सिर्फ उत्सुक कैसे क्या आप $ api-> विधि ('param') -> getName() का उपयोग करते समय getData फ़ंक्शन को कॉल करते हैं? मुझे pls downvote मत करो, मैं बस कुछ सीखना चाहता हूं ... मैंने सोचा था कि कक्षा के पास विधि के लिए विधि का नाम होना चाहिए, लेकिन मैं वहां कोई विधि देख सकता हूं नाम() जो मैं पूछ रहा हूं ... अग्रिम में Thx आपका उत्तर :-) – Redrif
@Redrif: यह सिर्फ एक छोटा टाइपो था, मुझे खेद है। मैंने इसे अपने वास्तविक कोड से कॉपी और पेस्ट करने की कोशिश की (और चीजों के नामों को बदलें)। यह वास्तव में '$ api-> विधि ('param') होना चाहिए -> getData()'। यहां कोई जादू नहीं है, सिर्फ प्रश्न में एक टाइपो। –