दिलचस्प पोस्ट
अल्पविराम से अलग स्ट्रिंग में मानों को ढूँढने के लिए MySQL क्वेरी कैसे जावा में int को पूर्णांक में बदलने के लिए? ओएस में क्या होता है जब हम सी में एक नल सूचक को dereference? क्या विभिन्न डेटाबेस अलग नाम बोली का उपयोग करें? स्काला में क्या समारोह लागू है? क्या आप सेटिंग में सेटिंग्स बना सकते हैं.बंडल डिफ़ॉल्ट भी अगर आप सेटिंग ऐप नहीं खोलते हैं एक <a> लिंक पर क्लिक करते समय पुष्टिकरण संवाद कैसे प्रदर्शित किया जाए? ताज़ा स्थापित होने के बाद RabbitMQ वेब प्रबंधन अंतरफलक तक नहीं पहुंच सकते एसटीएल कंटेनरों में वर्चुअल डिस्ट्रक्टर्स क्यों नहीं हैं? क्या मैं सभी वस्तुओं की एक संकलन-सूची सूची प्राप्त कर सकता हूं जो स्काला में मुहरबंद माता-पिता से प्राप्त होती है? सरल सोप उदाहरण सी में निश्चित पता चर सुपर () को एक व्युत्पन्न वर्ग में बुलाते समय, क्या मैं स्वयं .__ वर्ग__ में पारित कर सकता हूं? एक वन-टू-रिलेशन ऑफ़ आलसी बनाना 'var' पैरामीटर नापसंद किए गए हैं और स्विफ्ट 3 में निकाल दिए जाएंगे

PHP में गुमनाम वस्तुओं का निर्माण करना

जैसा कि हम जानते हैं, जावास्क्रिप्ट में बेनामी ऑब्जेक्ट्स बनाना आसान है, नीचे दिए गए कोड की तरह:

var object = { p : "value", p1 : [ "john", "johnny" ] } ; alert(object.p1[1]) ; 

आउटपुट:

 an alert is raised with value "johnny" 

क्या इस तकनीक को PHP के मामले में लागू किया जा सकता है? क्या हम PHP में बेनामी ऑब्जेक्ट बना सकते हैं?

वेब के समाधान से एकत्रित समाधान "PHP में गुमनाम वस्तुओं का निर्माण करना"

यह कुछ साल रहा है, लेकिन मुझे लगता है कि मुझे सूचना को अद्यतित रखने की जरूरत है!

पीएचपी -7 में अनाम वर्ग बनाना संभव है, इसलिए आप इस तरह से काम करने में सक्षम हैं:

 <?php class Foo {} $child = new class extends Foo {}; var_dump($child instanceof Foo); // true ?> 

आप आरएफसी (इसे स्वीकार किया जाता है) में इसके बारे में अधिक पढ़ सकते हैं: https://wiki.php.net/rfc/anonymous_classes

लेकिन मुझे नहीं पता कि यह जावास्क्रिप्ट के समान कैसे लागू किया गया है, इसलिए जावास्क्रिप्ट और PHP में गुमनाम कक्षाओं के बीच उनका कुछ अंतर हो सकता है।

संपादित करें:

पोस्ट की गई टिप्पणियों के अनुसार, मैन्युअल अब यहां लिंक है: http://php.net/manual/en/language.oop5.anonymous.php

वस्तुओं के बारे में बात करते समय "बेनामी" सही शब्दावली नहीं है यह "गुमनाम प्रकार का उद्देश्य" कहने में बेहतर होगा, लेकिन यह PHP पर लागू नहीं होता है।

PHP में सभी ऑब्जेक्ट्स एक क्लास हैं। "डिफ़ॉल्ट" वर्ग stdClass , और आप इस तरह से ऑब्जेक्ट बना सकते हैं:

 $obj = new stdClass; $obj->aProperty = 'value'; 

आप किसी ऑरेंज को अधिक सुविधाजनक सिंटैक्स के लिए सरणी का कास्टिंग का लाभ भी ले सकते हैं:

 $obj = (object)array('aProperty' => 'value'); print_r($obj); 

हालांकि, सलाह दी जानी चाहिए कि ऑब्जेक्ट को एक ऑरेट करने के लिए उन सरणी कुंजियों के लिए "रोचक" परिणाम उत्पन्न होने की संभावना है, जो कि वैध PHP चर नाम नहीं हैं – उदाहरण के लिए, यहां मेरा एक जवाब है जो दिखाता है कि जब चाबियाँ अंक से शुरू होती हैं

हाँ यह संभव है! इस सरल PHP अनाम वस्तु वर्ग का उपयोग करना। यह काम किस प्रकार करता है:

 // define by passing in constructor $anonim_obj = new AnObj(array( "foo" => function() { echo "foo"; }, "bar" => function($bar) { echo $bar; } )); $anonim_obj->foo(); // prints "foo" $anonim_obj->bar("hello, world"); // prints "hello, world" // define at runtime $anonim_obj->zoo = function() { echo "zoo"; }; $anonim_obj->zoo(); // prints "zoo" // mimic self $anonim_obj->prop = "abc"; $anonim_obj->propMethod = function() use($anonim_obj) { echo $anonim_obj->prop; }; $anonim_obj->propMethod(); // prints "abc" 

बेशक यह ऑब्जेक्ट AnObj वर्ग का एक उदाहरण है, इसलिए यह वास्तव में गुमनाम नहीं है, लेकिन यह मक्खी पर तरीकों को परिभाषित करना संभव बनाता है, जैसे जावास्क्रिप्ट करें।

यदि आप JavaScript की नकल करना चाहते हैं, तो आप एक कक्षा Object बना सकते हैं, और इस प्रकार एक ही व्यवहार प्राप्त कर सकते हैं। बेशक यह अब काफी अनाम नहीं है, लेकिन यह काम करेगा

 <?php class Object { function __construct( ) { $n = func_num_args( ) ; for ( $i = 0 ; $i < $n ; $i += 2 ) { $this->{func_get_arg($i)} = func_get_arg($i + 1) ; } } } $o = new Object( 'aProperty', 'value', 'anotherProperty', array('element 1', 'element 2')) ; echo $o->anotherProperty[1]; ?> 

यह उत्पादन तत्व 2 होगा यह PHP पर एक टिप्पणी से चोरी हो गया था : क्लासेस और ऑब्जेक्ट्स

हाल ही में जब तक मैं मक्खी पर ऑब्जेक्ट्स बना रहा हूं।

 $someObj = json_decode("{}"); 

फिर:

 $someObj->someProperty = someValue; 

लेकिन अब मैं इसके साथ जाता हूं:

 $someObj = (object)[]; 

फिर पहले की तरह:

 $someObj->someProperty = someValue; 

बेशक, यदि आप गुणों और मूल्यों को पहले से जानते हैं तो आप इन्हें इन्हें अंदर सेट कर सकते हैं जैसा कि उल्लेख किया गया है:

 $someObj = (object)['prop1' => 'value1','prop2' => 'value2']; 

एनबी: मुझे नहीं पता कि PHP के कौन-से संस्करण इस पर काम करता है, इसलिए आपको इसके बारे में ध्यान देना होगा। लेकिन मुझे लगता है कि पहला दृष्टिकोण (जो भी कम है अगर निर्माण पर सेट करने के लिए कोई गुण नहीं है) सभी संस्करणों के लिए काम करना चाहिए जो कि json_encode / json_decode

क्या इस तकनीक को PHP के मामले में लागू किया जा सकता है?

नहीं – क्योंकि जावास्क्रिप्ट प्रोटोटाइप / ऑब्जेक्ट की सीधी घोषणा का उपयोग करता है – PHP में (और कई अन्य ओ ओ भाषाओं) एक ऑब्जेक्ट केवल एक क्लास से बनाया जा सकता है।

तो प्रश्न बन जाता है – क्या आप एक अज्ञात वर्ग बना सकते हैं।

फिर से जवाब नहीं है – आप इसका संदर्भ देने में सक्षम होने के बिना कक्षा को कैसे इन्स्तांत करेंगे?

यदि आप गतिशील गुणों के साथ ऑब्जेक्ट (जैसे जावास्क्रिप्ट) बनाना चाहते हैं, बिना अपरिभाषित गुण की चेतावनी प्राप्त किए, जब आपने संपत्ति के लिए कोई मान सेट नहीं किया है

 class stdClass { public function __construct(array $arguments = array()) { if (!empty($arguments)) { foreach ($arguments as $property => $argument) { if(is_numeric($property)): $this->{$argument} = null; else: $this->{$property} = $argument; endif; } } } public function __call($method, $arguments) { $arguments = array_merge(array("stdObject" => $this), $arguments); // Note: method argument 0 will always referred to the main class ($this). if (isset($this->{$method}) && is_callable($this->{$method})) { return call_user_func_array($this->{$method}, $arguments); } else { throw new Exception("Fatal error: Call to undefined method stdObject::{$method}()"); } } public function __get($name){ if(property_exists($this, $name)): return $this->{$name}; else: return $this->{$name} = null; endif; } public function __set($name, $value) { $this->{$name} = $value; } } $obj1 = new stdClass(['property1','property2'=>'value']); //assign default property echo $obj1->property1;//null echo $obj1->property2;//value $obj2 = new stdClass();//without properties set echo $obj2->property1;//null