यह पोस्ट विशेष रूप से नहीं है __get
और __set
बल्कि __call
विधि कॉलिंग को छोड़कर एक ही विचार है। एक नियम के रूप में, मैं जादू तरीकों कि टिप्पणियों और पोस्ट में उल्लिखित कारणों के लिए अधिक भार के लिए अनुमति देने से किसी भी प्रकार से दूर रहना हालांकि , मैं हाल ही में एक 3-पक्ष एपीआई में भाग रहा है जो एक सेवा है और एक उप-सेवा, उदाहरण का उपयोग करता है का उपयोग करने वाले :
http://3rdparty.api.com?service=APIService.doActionOne&apikey=12341234
इसका महत्वपूर्ण हिस्सा यह है कि इस एपीआई में सब-एक्शन के अलावा सब कुछ समान है, इस मामले में doActionOne
। विचार यह है कि डेवलपर (इस वर्ग का उपयोग करने वाले अन्य लोग) उप-सेवा को नाम से बुला सकते हैं जैसे कि कुछ इस तरह विरोध किया गया है:
$myClass->doAction(array('service'=>'doActionOne','args'=>$args));
मैं इसके बजाय कर सकता था:
$myClass->doActionOne($args);
हार्डकोड करने के लिए यह सिर्फ बहुत दोहराव होगा (यह उदाहरण बहुत ही कोड जैसा दिखता है):
public function doActionOne($array)
{
$this->args = $array;
$name = __FUNCTION__;
$this->response = $this->executeCoreCall("APIService.{$name}");
}
public function doActionTwo($array)
{
$this->args = $array;
$name = __FUNCTION__;
$this->response = $this->executeCoreCall("APIService.{$name}");
}
public function doActionThree($array)
{
$this->args = $array;
$name = __FUNCTION__;
$this->response = $this->executeCoreCall("APIService.{$name}");
}
protected function executeCoreCall($service)
{
$cURL = new \cURL();
return $cURL->('http://3rdparty.api.com?service='.$service.'&apikey='.$this->api.'&'.http_build_query($this->args))
->getResponse();
}
लेकिन __call()
मैं जादुई पद्धति से सभी सेवाओं को गतिशील तरीकों से एक्सेस करने में सक्षम हूं:
public function __call($name, $arguments)
{
$this->args = $arguments;
$this->response = $this->executeCoreCall("APIService.{$name}");
return $this;
}
डेटा की वापसी के लिए इस गतिशील कॉलिंग का लाभ यह है कि अगर विक्रेता एक अन्य उप-सेवा को जोड़ता है, तो मुझे कक्षा में कोई अन्य विधि जोड़ने या विस्तारित वर्ग बनाने की आवश्यकता नहीं है, मुझे यकीन नहीं है कि यह उपयोगी है किसी को भी, लेकिन मुझे लगता है मैं एक उदाहरण है जहां यह दिखाएगा लगा __set
, __get
, __call
, आदि पर विचार के लिए एक विकल्प हो सकता है क्योंकि प्राथमिक कार्य डेटा की वापसी है।
संपादित करें:
संयोग से, मैंने इसे पोस्ट करने के कुछ दिनों बाद देखा, जो वास्तव में मेरे परिदृश्य को रेखांकित करता है। यह वह API नहीं है जिसका मैं उल्लेख कर रहा था, लेकिन विधियों का अनुप्रयोग समान है:
क्या मैं एपीआई का सही उपयोग कर रहा हूं?