দয়া করে সংজ্ঞায়িত কি stdClass
হয়।
দয়া করে সংজ্ঞায়িত কি stdClass
হয়।
উত্তর:
stdClass
পিএইচপি-র জেনেরিক খালি শ্রেণি, Object
জাভা বা object
পাইথনের মতো ধরণের ( সম্পাদনা: তবে প্রকৃতপক্ষে সর্বজনীন বেস শ্রেণি হিসাবে ব্যবহৃত হয় না; এটি নির্দেশ করার জন্য ধন্যবাদ @ সিয়ারান ))
এটি বেনামে থাকা বস্তু, গতিশীল বৈশিষ্ট্য ইত্যাদির জন্য দরকারী useful
স্টাডক্লাস বিবেচনা করার একটি সহজ উপায় হ'ল এসোসিয়েটিভ অ্যারের বিকল্প হিসাবে। নীচের এই উদাহরণটি দেখুন যা দেখায় যে কীভাবে json_decode()
একটি স্টাডক্লাস উদাহরণ বা কোনও এসোসিয়েটিভ অ্যারে পাবেন। এছাড়াও তবে এই উদাহরণে প্রদর্শিত হয়নি, SoapClient::__soapCall
একটি স্টাডক্লাস উদাহরণ দেয়।
<?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
আরও উদাহরণের জন্য পিএইচপি এবং স্টাডক্লাসে গতিশীল বৈশিষ্ট্যগুলি দেখুন ।
{}
নির্মাণ মত কিছু ।
function(StdClass $a, array $params)
বনাম $a
বস্তু এবং কিনা তা পরীক্ষা করা instanceof
।
stdClass
অন্য ধরণের বস্তুতে কাস্ট করার সময় এটি কেবল একটি জেনেরিক 'খালি' শ্রেণি ব্যবহৃত হয়। অন্য দুটি উত্তর কি বলতে সত্ত্বেও, stdClass
হয় না পিএইচপি বস্তুর জন্য বেস বর্গ। এটি মোটামুটি সহজেই প্রদর্শিত হতে পারে:
class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Y':'N';
// outputs 'N'
আমি বিশ্বাস করি না যে পিএইচপি-তে বেস অবজেক্টের ধারণা রয়েছে
stdClass অন্য একটি দুর্দান্ত পিএইচপি বৈশিষ্ট্য। আপনি একটি বেনামে পিএইচপি ক্লাস তৈরি করতে পারেন। একটি উদাহরণ চেক করা যাক।
$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();
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
। এখানে বিশেষ কিছু হয় না। পিএইচপি এই ক্লাসটি ব্যবহার করে যখন অন্য মানকে আপত্তি করতে দেয়।
stdClass
প্রোগ্রামারদের দ্বারা ব্যবহৃত বেশিরভাগ ক্ষেত্রে অ্যারে আরও ভাল বিকল্প, কারণ দরকারী কার্যকারিতা এবং এই ইউসকেসটি ডেটা স্ট্রাকচারকে একটি আসল অবজেক্ট নয় বলে উপস্থাপন করে।
এটি লক্ষণীয় যে কাস্টিং ব্যবহার করে আপনাকে আসলে @ বানডুলার দেওয়া উত্তরের মতো কোনও বস্তু তৈরি করার দরকার নেই। পরিবর্তে আপনি কেবল কোনও বস্তুতে আপনার অ্যারে কাস্ট করতে পারেন এবং stdClass ফিরে আসে। উদাহরণ স্বরূপ:
$array = array(
'Property1'=>'hello',
'Property2'=>'world',
'Property3'=>'again',
);
$obj = (object) $array;
echo $obj->Property3;
Output: again
প্রকৃতপক্ষে আমি খালি stdClass তৈরি করার চেষ্টা করেছি এবং গতিটি খালি শ্রেণির সাথে তুলনা করেছি।
class emp{}
তারপরে ১০০০ টি স্টাডি ক্লাস এবং এম্প তৈরি করার প্রক্রিয়া চালানো হয়েছিল ... খালি ক্লাসগুলি প্রায় ১১০০ মাইক্রোসেকেন্ডে করা হয়েছিল এবং এসটিডি ক্লাসগুলি ১00০০ টি মাইক্রোসেকেন্ড নিয়েছে। সুতরাং ডেটা সংরক্ষণের জন্য আপনার নিজের ডামি ক্লাস তৈরি করা ভাল বলে অনুমান করা হয় যদি আপনি এর জন্য খুব খারাপভাবে অবজেক্ট ব্যবহার করতে চান (অ্যারেগুলি লেখার জন্য এবং পড়া উভয়ের পক্ষে অনেক দ্রুত)।
StdClass আপনাকে বেনামে ক্লাস তৈরি করতে দেয় এবং অবজেক্ট কাস্টিংয়ের সাহায্যে আপনি ওওপি স্টাইলে কোনও এসোসিয়েটিভ অ্যারের কীগুলিও অ্যাক্সেস করতে পারেন। ঠিক যেমন আপনি নিয়মিত বস্তুর সম্পত্তি অ্যাক্সেস করবেন।
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 টি খালি স্টাডি ক্লাসগুলি কঠোরভাবে সমান নয়। বিদ্রূপের প্রত্যাশা লেখার সময় এটি অত্যন্ত গুরুত্বপূর্ণ।
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 >
পিএইচপি.এন.এই ম্যানুয়ালটির কয়েকটি দৃC় ব্যাখ্যা এবং stdClass কী তা ব্যবহারকারীর দ্বারা প্রদত্ত উদাহরণ রয়েছে, আমি বিশেষত এটি পছন্দ করি http://php.net/manual/en/language.oop5.basic.php#92123 , https: // stackoverflow.com/a/1434375/2352773 ।
stdClass ডিফল্ট পিএইচপি অবজেক্ট। stdClass এর কোনও বৈশিষ্ট্য, পদ্ধতি বা পিতামাতাই নেই। এটি যাদু পদ্ধতিগুলি সমর্থন করে না এবং কোনও ইন্টারফেস প্রয়োগ করে না।
আপনি যখন কোনও স্কেলার বা অ্যারেটিকে অবজেক্ট হিসাবে কাস্ট করেন, আপনি স্টাডক্লাসের একটি উদাহরণ পাবেন। যখনই আপনার জেনেরিক অবজেক্টের উদাহরণ প্রয়োজন তখন আপনি stdClass ব্যবহার করতে পারেন।
stdClass বেস ক্লাস নয়! পিএইচপি ক্লাসগুলি কোনও ক্লাস থেকে স্বয়ংক্রিয়ভাবে উত্তরাধিকারী হয় না। সমস্ত ক্লাসগুলি স্বতন্ত্র, যদি না তারা স্পষ্টভাবে অন্য শ্রেণির প্রসারিত করে। পিএইচপি এই বিষয়ে অনেক অবজেক্ট-ভিত্তিক ভাষা থেকে পৃথক।
আপনি একটি ক্লাস সংজ্ঞায়িত করতে পারেন যা stdClass প্রসারিত করতে পারে তবে আপনি কোনও সুবিধা পাবেন না, কারণ stdClass কিছুই করে না।
stdclass একটি উপায় যা পিএইচপি যখন কোনও ক্লাসে কিছু ডেটা রাখতে হবে তখন স্ক্রিপ্টটির ব্যাখ্যা বন্ধ করা এড়াতে হবে, তবে দুর্ভাগ্যক্রমে এই শ্রেণিটি সংজ্ঞায়িত হয়নি
উদাহরণ:
return $statement->fetchAll(PDO::FETCH_CLASS , 'Tasks');
এখানে ডেটা পূর্বনির্ধারিত 'টাস্কগুলিতে' রাখা হবে। তবে, যদি আমরা কোডটি এইভাবে করি:
return $statement->fetchAll(PDO::FETCH_CLASS );
এরপর পিএইচপি ফলাফল রাখবে stdclass ।
কেবল পিএইচপিবলেছেন যে: দেখুন, আমাদের এখানে একটি ভাল বাচ্চা আছে [বিষয়গুলি] তবে বাবা-মা ছাড়া। সুতরাং, আমরা তাদের একটি শিশু শিশু কেয়ার হোমে প্রেরণ করব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 একটি খালি শ্রেণি যা পিএইচপি নিজেই তৈরি করেছে, এবং কেবল পিএইচপি দ্বারা ব্যবহার করা উচিত, কারণ এটি কেবল একটি "খালি" শ্রেণি নয়, পিএইচপি যদি অ্যারেগুলি অবজেক্ট স্টাইলে রূপান্তর করতে 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';
কী অ্যারে স্টাইলের পরিবর্তে অবজেক্ট স্টাইলটি ব্যবহার সম্পর্কে কাউকে ভাবতে বাধ্য করে ???
আমাদের স্টাডক্লাস করার কারণটি হ'ল পিএইচপি-তে কোনও সহযোগী অ্যারে থেকে কোনও সাধারণ অ্যারে আলাদা করার কোনও উপায় নেই (যেমন জাভাস্ক্রিপ্টে আপনার {}
অবজেক্টের []
জন্য এবং অ্যারেগুলি আলাদা করার জন্য)।
সুতরাং এটি খালি জিনিসগুলির জন্য একটি সমস্যা তৈরি করে। উদাহরণস্বরূপ এটি গ্রহণ করুন।
পিএইচপি:
$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
এখন খালি (আপনি কীগুলি মনে রাখবেন সমস্ত মুছে ফেলেছেন?), দেখে মনে হচ্ছে এটির দিকে []
তাকালে কোনটি অ্যারে বা অবজেক্ট হতে পারে।
সুতরাং আপনি যদি আবার একটি জসন_কেনড করেন তবে আউটপুটটি ভিন্ন হবে
echo json_encode($c);
// outputs => {'a': [1,2,3], 'b': []}
এটি একটি সমস্যা কারণ আমরা জানি b
যে একটি সহযোগী অ্যারে হওয়ার কথা ছিল তবে পিএইচপি (বা 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
এবং এটিকে খালি করে দিন, যেহেতু এটি একটি স্টাড ক্লাস তাই এটি কোনও লাভজনক নয় এবং আপনি যখন এটি জেনসোন_কোড করেন তখন আপনি এটি পাবেন:
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