PHP में stdClass क्या है?




(13)

आप अपनी पसंद के किसी ऑब्जेक्ट को सरणी डालने के लिए 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];

दूसरी विधि कई गुणों के साथ वस्तुओं को शुरू करने के लिए अधिक उपयोगी है।

कृपया परिभाषित करें कि stdClass क्या है।


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';
    }
}

अब आपको पेज ऑब्जेक्ट के साथ एक नया पेजशो ऑब्जेक्ट बनाना होगा।

यहां इसके लिए एक नया क्लास टेम्पलेट लिखने की आवश्यकता नहीं है, आप फ्लाई पर कक्षा बनाने के लिए बस stdClass का उपयोग कर सकते हैं।

    $pageview=new PageShow($page);
    $pageview->show();

कृपया ध्यान रखें कि 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://.com/a/1434375/2352773 ।

stdClass डिफ़ॉल्ट PHP ऑब्जेक्ट है। stdClass में कोई गुण, विधियां या माता-पिता नहीं हैं। यह जादू तरीकों का समर्थन नहीं करता है, और कोई इंटरफेस लागू नहीं करता है।

जब आप ऑब्जेक्ट के रूप में स्केलर या सरणी डालते हैं, तो आपको stdClass का एक उदाहरण मिलता है। जब भी आपको सामान्य ऑब्जेक्ट उदाहरण की आवश्यकता होती है तो आप stdClass का उपयोग कर सकते हैं।

stdClass आधार वर्ग नहीं है! PHP वर्ग स्वचालित रूप से किसी भी वर्ग से प्राप्त नहीं होते हैं। सभी वर्ग स्टैंडअलोन हैं, जब तक वे स्पष्ट रूप से एक और वर्ग का विस्तार नहीं करते हैं। PHP इस संबंध में कई ऑब्जेक्ट उन्मुख भाषाओं से अलग है।

आप stdClass को विस्तारित करने वाली कक्षा को परिभाषित कर सकते हैं, लेकिन आपको कोई लाभ नहीं मिलेगा, क्योंकि stdClass कुछ भी नहीं करता है।


stdClass केवल एक सामान्य 'खाली' वर्ग है जिसका उपयोग वस्तुओं के अन्य प्रकारों को कास्टिंग करते समय किया जाता है। अन्य दो उत्तरों के बावजूद, PHP में ऑब्जेक्ट्स के लिए stdClass आधार वर्ग नहीं है। यह काफी आसानी से प्रदर्शित किया जा सकता है:

class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Y':'N';
// outputs 'N'

मुझे विश्वास नहीं है कि PHP में मूल वस्तु की अवधारणा है


stdclass एक तरीका है जिसमें php स्क्रिप्ट को समझने से रोकने से बचता है जब कक्षा में कुछ डेटा डाला जाना चाहिए, लेकिन दुर्भाग्य से इस वर्ग को परिभाषित नहीं किया गया था

उदाहरण :

 return $statement->fetchAll(PDO::FETCH_CLASS  , 'Tasks');

यहां डेटा पूर्वनिर्धारित 'कार्य' में रखा जाएगा। लेकिन, अगर हमने इस तरह कोड किया था:

 return $statement->fetchAll(PDO::FETCH_CLASS );

तो php परिणाम stdclass में डाल stdclass ।

बस php कहते हैं कि: देखो, हमारे पास एक अच्छे बच्चे हैं [ऑब्जेक्ट्स] यहां लेकिन माता-पिता के बिना। तो, हम उन्हें एक शिशु बच्चे केयर होम stdclass भेज देंगे :)


StdClass का उपयोग करके आप अपनी खुद की संपत्तियों के साथ एक नई वस्तु बना सकते हैं। निम्न उदाहरण पर विचार करें जो उपयोगकर्ता के विवरण को एक सहयोगी सरणी के रूप में दर्शाता है।

$array_user = array();
$array_user["name"] = "smith john";
$array_user["username"] = "smith";
$array_user["id"] = "1002";
$array_user["email"] = "[email protected]";

यदि आपको किसी ऑब्जेक्ट के गुणों के समान विवरणों का प्रतिनिधित्व करने की आवश्यकता है, तो आप नीचे के रूप में stdClass का उपयोग कर सकते हैं।

$obj_user = new stdClass;
$obj_user->name = "smith john";
$obj_user->username = "smith";
$obj_user->id = "1002";
$obj_user->email = "[email protected]";

यदि आप जूमला डेवलपर हैं तो इस उदाहरण को जूमला डॉक्स में और समझने के लिए देखें।


stClass php द्वारा बनाई गई एक खाली कक्षा है, और इसे केवल php द्वारा उपयोग किया जाना चाहिए, क्योंकि यह केवल "खाली" वर्ग नहीं है, php stdClass का उपयोग करने के लिए यदि आपको 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 वापस कर दिया जाता है। उदाहरण के लिए:

$array = array(
    'Property1'=>'hello',
    'Property2'=>'world',
    'Property3'=>'again',
);

$obj = (object) $array;
echo $obj->Property3;

Output: again


इसी तरह,

$myNewObj->setNewVar = 'newVal'; 

एक stdClass वस्तु पैदा करता है - ऑटो जाली

मैंने इसे गलत वर्तनी से आज पाया:

$GLOBASLS['myObj']->myPropertyObj->myProperty = 'myVal';

ठंडा!


stdClass PHP की जेनेरिक खाली कक्षा है, जावा में object या पायथन में object की तरह ( संपादित करें: लेकिन वास्तव में सार्वभौमिक बेस क्लास के रूप में उपयोग नहीं किया जाता है; धन्यवाद @ सीरान इसे इंगित करने के लिए धन्यवाद)।

यह अज्ञात वस्तुओं, गतिशील गुणों आदि के लिए उपयोगी है।

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 में गतिशील गुण देखें।


यदि आप पुस्तक के बारे में कुछ डेटा रखने के लिए जल्दी से एक नई वस्तु बनाना चाहते हैं। आप ऐसा कुछ करेंगे:

$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://rads..com/amzn/click/0439136369";

अधिक जानकारी के लिए कृपया साइट की जांच करें - http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/


असल में मैंने खाली stdClass बनाने की कोशिश की और गति की तुलना खाली कक्षा में की।

class emp{}

फिर 1000 stdClasses और emps बनाने के लिए आगे बढ़े ... खाली कक्षाएं लगभग 1100 माइक्रोसेकंड में की गई थीं जबकि stdClasses ने 1700 से अधिक माइक्रोसेकंड लिया था। तो मुझे लगता है कि यदि आप इतनी बुरी तरह से ऑब्जेक्ट्स का उपयोग करना चाहते हैं तो डेटा संग्रहित करने के लिए अपनी खुद की डमी क्लास बनाने के लिए बेहतर है (लेखन और पढ़ने दोनों के लिए सरणी बहुत तेज हैं)।







stdclass