कृपया परिभाषित करें कि क्या stdClass
है।
कृपया परिभाषित करें कि क्या stdClass
है।
जवाबों:
stdClass
PHP का सामान्य खाली वर्ग है, Object
जावा में या object
पाइथन की तरह है ( संपादित करें: लेकिन वास्तव में सार्वभौमिक आधार वर्ग के रूप में उपयोग नहीं किया जाता है; धन्यवाद @Ciaran इस ओर इशारा करते हुए )।
यह अनाम वस्तुओं, गतिशील गुणों आदि के लिए उपयोगी है।
StdClass पर विचार करने का एक आसान तरीका साहचर्य सरणी के विकल्प के रूप में है। नीचे दिए गए इस उदाहरण को देखें कि कैसे json_decode()
एक StdClass उदाहरण या एक सहयोगी सरणी प्राप्त करने की अनुमति मिलती है। इसके अलावा, लेकिन इस उदाहरण में नहीं दिखाया गया है, SoapClient::__soapCall
एक StdClass उदाहरण देता है।
<?php
//Example with StdClass
$json = '{ "foo": "bar", "number": 42 }';
$stdInstance = json_decode($json);
echo $stdInstance->foo . PHP_EOL; //"bar"
echo $stdInstance->number . PHP_EOL; //42
//Example with associative array
$array = json_decode($json, true);
echo $array['foo'] . PHP_EOL; //"bar"
echo $array['number'] . PHP_EOL; //42
अधिक उदाहरणों के लिए PHP और StdClass में गतिशील गुण देखें ।
{}
निर्माण की तरह है ।
function(StdClass $a, array $params)
जाँच करना । $a
instanceof
stdClass
सिर्फ एक सामान्य 'खाली' वर्ग है जो वस्तुओं के अन्य प्रकारों को कास्टिंग करते समय उपयोग किया जाता है। अन्य दो जवाब क्या कहते हैं के बावजूद, stdClass
है नहीं PHP में वस्तुओं के लिए आधार वर्ग। यह काफी आसानी से प्रदर्शित किया जा सकता है:
class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Y':'N';
// outputs 'N'
मेरा मानना है कि PHP में आधार ऑब्जेक्ट की अवधारणा नहीं है
stdClass एक और बेहतरीन PHP फीचर है। आप एक अनाम PHP वर्ग बना सकते हैं। एक उदाहरण की जाँच करें।
$page=new stdClass();
$page->name='Home';
$page->status=1;
अब सोचें कि आपके पास एक अन्य वर्ग है जो एक पृष्ठ ऑब्जेक्ट के साथ आरंभ करेगा और उस पर आधार निष्पादित करेगा।
<?php
class PageShow {
public $currentpage;
public function __construct($pageobj)
{
$this->currentpage = $pageobj;
}
public function show()
{
echo $this->currentpage->name;
$state = ($this->currentpage->status == 1) ? 'Active' : 'Inactive';
echo 'This is ' . $state . ' page';
}
}
अब आपको Page Page के साथ एक नया PageShow ऑब्जेक्ट बनाना है।
यहां आपको इसके लिए एक नया क्लास टेम्प्लेट लिखने की आवश्यकता नहीं है आप बस मक्खी पर क्लास बनाने के लिए stdClass का उपयोग कर सकते हैं।
$pageview=new PageShow($page);
$pageview->show();
stdClass
।
इसके अलावा ध्यान देने योग्य है, एक stdClass
वस्तु के उपयोग से भी बनाया जा सकता है json_decode()
।
True
। बूलियन लोअर केस हैं true
या false
।
StdClass का उपयोग करके आप अपने गुणों के साथ एक नई वस्तु बना सकते हैं। निम्नलिखित उदाहरण पर विचार करें जो उपयोगकर्ता के विवरण को एक सहयोगी सरणी के रूप में दर्शाता है।
$array_user = array();
$array_user["name"] = "smith john";
$array_user["username"] = "smith";
$array_user["id"] = "1002";
$array_user["email"] = "smith@nomail.com";
यदि आपको किसी वस्तु के गुणों के समान विवरण का प्रतिनिधित्व करने की आवश्यकता है, तो आप नीचे दिए अनुसार stdClass का उपयोग कर सकते हैं ।
$obj_user = new stdClass;
$obj_user->name = "smith john";
$obj_user->username = "smith";
$obj_user->id = "1002";
$obj_user->email = "smith@nomail.com";
यदि आप एक जूमला डेवलपर हैं तो आगे की समझ के लिए जूमला डॉक्स में इस उदाहरण को देखें ।
इसी तरह,
$myNewObj->setNewVar = 'newVal';
एक stdClass वस्तु पैदावार - ऑटो डाली
मुझे आज यह गलत वर्तनी से पता चला:
$GLOBASLS['myObj']->myPropertyObj->myProperty = 'myVal';
ठंडा!
यहां उत्तर में ऐसे भाव शामिल हैं जो stdClass
एक अनाम वर्ग या यहां तक कि अनाम वस्तु है। यह सच नहीं है।
stdClass
बस एक नियमित पूर्वनिर्धारित वर्ग है। आप instanceof
ऑपरेटर या फ़ंक्शन का उपयोग करके इसे देख सकते हैं get_class
। यहां कुछ खास नहीं चला। PHP इस वर्ग का उपयोग तब करता है जब अन्य मानों को ऑब्जेक्ट में डालना।
कई मामलों में जहां stdClass
प्रोग्रामर द्वारा उपयोग किया जाता है, सरणी बेहतर विकल्प है, क्योंकि उपयोगी कार्यों और इस तथ्य के कारण कि यह यूज़ेस डेटा संरचना का प्रतिनिधित्व करता है वास्तविक वस्तु नहीं है।
यह भी ध्यान देने योग्य है कि कास्टिंग का उपयोग करके आपको वास्तव में @Bandula द्वारा दिए गए उत्तर के रूप में एक ऑब्जेक्ट बनाने की आवश्यकता नहीं है। इसके बजाय आप बस अपने सरणी को किसी ऑब्जेक्ट में डाल सकते हैं और stdClass वापस आ जाते हैं। उदाहरण के लिए:
$array = array(
'Property1'=>'hello',
'Property2'=>'world',
'Property3'=>'again',
);
$obj = (object) $array;
echo $obj->Property3;
Output: again
वास्तव में मैंने खाली stdClass बनाने की कोशिश की और गति की तुलना खाली वर्ग से की।
class emp{}
फिर 1000 stdClasses और emps बनाते हुए आगे बढ़े ... लगभग 1100 माइक्रोसेकंड में खाली कक्षाएं की गईं जबकि stdClasses ने 1700 से अधिक माइक्रोसेकंड ले लिए। इसलिए मैं डेटा स्टोर करने के लिए अपनी खुद की डमी क्लास बनाने के लिए इसका बेहतर अनुमान लगाता हूं अगर आप वस्तुओं को इतनी बुरी तरह से उपयोग करना चाहते हैं (लिखने और पढ़ने दोनों के लिए सरणियां बहुत तेज हैं)।
StdClass आपको अनाम कक्षाएं बनाने की अनुमति देता है और ऑब्जेक्ट कास्टिंग के साथ आप OOP शैली में एक सहयोगी सरणी की कुंजियों तक भी पहुंच सकते हैं। ठीक वैसे ही जैसे आप रेगुलर ऑब्जेक्ट प्रॉपर्टी को एक्सेस करेंगे।
class Example {
private $options;
public function __construct(Array $setup)
{
// casting Array to stdClass object
$this->options = (object) $setup;
// access stdClass object in oop style - here transform data in OOP style using some custom method or something...
echo $this->options->{'name'}; // ->{'key'}
echo $this->options->surname; // ->key
}
}
$ob1 = new Example(["name" => "John", "surname" => "Doe"]);
गूंज उठेगी
जॉन डो
यदि आप किसी पुस्तक के बारे में कुछ डेटा रखने के लिए जल्दी से एक नया ऑब्जेक्ट बनाना चाहते हैं। आप ऐसा कुछ करेंगे:
$book = new stdClass;
$book->title = "Harry Potter and the Prisoner of Azkaban";
$book->author = "J. K. Rowling";
$book->publisher = "Arthur A. Levine Books";
$book->amazon_link = "http://www.amazon.com/dp/0439136369/";
कृपया अधिक जानकारी के लिए साइट - http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/ देखें।
कृपया ध्यान रखें कि 2 खाली stdClasses कड़ाई से बराबर नहीं हैं। नकली उम्मीदों को लिखते समय यह बहुत महत्वपूर्ण है।
php > $a = new stdClass();
php > $b = new stdClass();
php > var_dump($a === $b);
bool(false)
php > var_dump($a == $b);
bool(true)
php > var_dump($a);
object(stdClass)#1 (0) {
}
php > var_dump($b);
object(stdClass)#2 (0) {
}
php >
php.net मैनुअल की कुछ ठोस व्याख्या और उदाहरण हैं जो stdClass के उपयोगकर्ताओं द्वारा योगदान दिया गया है, मुझे विशेष रूप से यह एक http://php.net/manual/en/language.oop5.basic.php#92123 , https: // पसंद है। stackoverflow.com/a/1434375/2352773 ।
stdClass डिफ़ॉल्ट PHP ऑब्जेक्ट है। stdClass का कोई गुण, विधियाँ या अभिभावक नहीं है। यह जादू के तरीकों का समर्थन नहीं करता है, और कोई इंटरफेस लागू नहीं करता है।
जब आप एक स्केलर या सरणी को ऑब्जेक्ट के रूप में रखते हैं, तो आपको stdClass का एक उदाहरण मिलता है। जब भी आपको जेनेरिक ऑब्जेक्ट इंस्टेंस की आवश्यकता हो आप stdClass का उपयोग कर सकते हैं।
stdClass एक बेस क्लास नहीं है! PHP कक्षाएं स्वचालित रूप से किसी भी वर्ग से विरासत में नहीं आती हैं। सभी कक्षाएं स्टैंडअलोन हैं, जब तक कि वे स्पष्ट रूप से किसी अन्य वर्ग का विस्तार नहीं करते हैं। PHP इस संबंध में कई ऑब्जेक्ट-ओरिएंटेड भाषाओं से अलग है।
आप एक वर्ग को परिभाषित कर सकते हैं जो stdClass का विस्तार करता है, लेकिन आपको कोई लाभ नहीं मिलेगा, क्योंकि stdClass कुछ भी नहीं करता है।
stdclass एक तरीका है जिसमें php जब कुछ डेटा को किसी कक्षा में रखा जाना चाहिए, तो स्क्रिप्ट की व्याख्या करने से रोकना चाहिए, लेकिन दुर्भाग्य से यह वर्ग परिभाषित नहीं था
उदाहरण :
return $statement->fetchAll(PDO::FETCH_CLASS , 'Tasks');
यहां डेटा पूर्वनिर्धारित 'टास्क' में डाला जाएगा। लेकिन, अगर हमने कोड इस प्रकार किया है:
return $statement->fetchAll(PDO::FETCH_CLASS );
फिर php में परिणाम डाल देंगे stdclass ।
केवल phpवह कहता है: देखो, हमारे पास एक अच्छा किड्स है [ऑब्जेक्ट्स] यहाँ पर पेरेंट्स के बिना। इसलिए, हम उन्हें एक शिशु शिशु गृह भेजेंगेstdclass :)
आप object
अपनी पसंद के किसी ऑब्जेक्ट में एरेज़ डालने के लिए भी उपयोग कर सकते हैं :
Class Example
{
public $name;
public $age;
}
अब एक प्रकार की वस्तु बनाने के लिए Example
और इसे शुरू करने के लिए आप इनमें से कोई भी कर सकते हैं:
$example = new Example();
$example->name = "some name";
$example->age = 22;
या
$example = new Example();
$example = (object) ['name' => "some name", 'age' => 22];
दूसरी विधि कई गुणों के साथ वस्तुओं को प्रारंभिक करने के लिए ज्यादातर उपयोगी है।
stClass स्वयं php द्वारा बनाया गया एक खाली वर्ग है, और इसका उपयोग केवल php द्वारा किया जाना चाहिए, क्योंकि यह सिर्फ एक "खाली" वर्ग नहीं है, php stdClass का उपयोग ऑब्जेक्ट शैली में सरणियों को बदलने के लिए करता है यदि आपको stdClass का उपयोग करने की आवश्यकता है, तो मैं दो बेहतर विकल्पों की सलाह देता हूं : 1- सरणियों का उपयोग करें (कक्षाओं की तुलना में बहुत तेजी से) 2- अपना खुद का खाली वर्ग बनाएं और इसका उपयोग करें
//example 1
$data=array('k1'=>'v1' , 'k2'=>'v2',....);
//example 2
//creating an empty class is faster than instances an stdClass
class data={}
$data=new data();
$data->k1='v1';
$data->k2='v2';
किसी को सरणी शैली के बजाय ऑब्जेक्ट शैली का उपयोग करने के बारे में सोचने के लिए क्या बनाता है ???
हमारे पास stdClass का कारण है क्योंकि PHP में एक सहयोगी सरणी से एक सामान्य सरणी को अलग करने का कोई तरीका नहीं है (जैसे जावास्क्रिप्ट में आपके पास {}
ऑब्जेक्ट के लिए है और []
सरणी के लिए उन्हें अलग करने के लिए है)।
तो यह खाली वस्तुओं के लिए एक समस्या पैदा करता है। उदाहरण के लिए इसे लें।
पीएचपी:
$a = [1, 2, 3]; // this is an array
$b = ['one' => 1, 'two' => 2]; // this is an associate array (aka hash)
$c = ['a' => $a, 'b' => $b]; // this is also an associate array (aka hash)
मान लेते हैं कि आप JSON को चर $ c को सांकेतिक शब्दों में बदलना चाहते हैं
echo json_encode($c);
// outputs => {'a': [1,2,3], 'b': {one: 1, two: 2}}
अब मान लें कि आपने सभी कुंजियों को $b
खाली करने से हटा दिया है। चूंकि $b
अब खाली है (आपने सभी कुंजियों को याद रखा है?), ऐसा दिखता है कि []
यदि आप इसे देखते हैं तो यह एक सरणी या वस्तु हो सकती है।
इसलिए यदि आप फिर से एक json_encode करते हैं, तो आउटपुट अलग होगा
echo json_encode($c);
// outputs => {'a': [1,2,3], 'b': []}
यह एक समस्या है क्योंकि हम जानते हैं b
कि एक सहयोगी सरणी होना चाहिए था, लेकिन PHP (या json_encode जैसे किसी भी फ़ंक्शन) नहीं करता है।
तो stdClass बचाव के लिए आता है। फिर से उसी उदाहरण को लेते हुए
$a = [1, 2, 3]; // this is an array
$b = (object) ['one' => 1, 'two' => 2]; // this makes it an stdClass
$c = ['a' => $a, 'b' => $b]; // this is also an associate array (aka hash)
तो अब भले ही आप सभी कुंजियों को हटा दें $b
और इसे खाली कर दें, क्योंकि यह एक stdClass है, इससे कोई फर्क नहीं पड़ेगा और जब आप इसे json_encode करेंगे तो आपको यह मिलेगा:
echo json_encode($c);
// outputs => {'a': [1,2,3], 'b': {}}
यही कारण है कि क्यों json_encode
और json_decode
डिफ़ॉल्ट रिटर्न stdClass द्वारा।
$c = json_decode('{"a": [1,2,3], "b": {}}', true); //true to deocde as array
// $c is now ['a' => [1,2,3], 'b' => []] in PHP
// if you json_encode($c) again your data is now corrupted