කරුණාකර කුමක්ද stdClass
යන්න නිර්වචනය කරන්න .
කරුණාකර කුමක්ද stdClass
යන්න නිර්වචනය කරන්න .
Answers:
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 හි ගතික ගුණාංග බලන්න .
{}
සෑදීම වගේ දෙයක් .
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';
}
}
දැන් ඔබට පිටු වස්තුවක් සමඟ නව පේජ්ෂෝ වස්තුවක් සෑදිය යුතුය.
මෙන්න මේ සඳහා නව පන්ති අච්චුවක් ලිවීමට අවශ්ය නැත. ඔබට මැස්සන් මත පන්තියක් නිර්මාණය කිරීමට 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
ක්රමලේඛකයින් විසින් අරාව වඩා හොඳ විකල්පයක් වන්නේ ප්රයෝජනවත් කාර්යයන් සහ මෙම භාවිත කේතය නිරූපණය කරන්නේ දත්ත ව්යුහය සැබෑ වස්තුවක් නොවන බැවිනි.
වාත්තු කිරීම භාවිතා කිරීමෙන් ඔබට සැබවින්ම “බන්ඩුල” දුන් පිළිතුරෙහි මෙන් වස්තුවක් නිර්මාණය කිරීමට අවශ්ය නොවන බව ද සඳහන් කිරීම වටී. ඒ වෙනුවට ඔබට ඔබේ අරාව වස්තුවකට දැමිය හැකි අතර stdClass නැවත ලබා දෙනු ලැබේ. උදාහරණයක් වශයෙන්:
$array = array(
'Property1'=>'hello',
'Property2'=>'world',
'Property3'=>'again',
);
$obj = (object) $array;
echo $obj->Property3;
Output: again
ඇත්තටම මම හිස් stdClass නිර්මාණය කිරීමට උත්සාහ කළ අතර වේගය හිස් පන්තියට සංසන්දනය කළෙමි.
class emp{}
පසුව stdClasses සහ emps 1000 ක් නිර්මාණය කරමින් ... හිස් පන්ති මයික්රෝ තත්පර 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/ වැඩි විස්තර සඳහා.
හිස් stdClasses 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 >
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 පන්ති ස්වයංක්රීයව කිසිදු පන්තියකින් උරුම නොවේ. වෙනත් පංතියක් පැහැදිලිවම දීර් extend නොකරන්නේ නම් සියලු පන්ති ස්වාධීන වේ. මේ සම්බන්ධයෙන් PHP බොහෝ වස්තු-නැඹුරු භාෂාවන්ට වඩා වෙනස් ය.
ඔබට stdClass විහිදෙන පන්තියක් අර්ථ දැක්විය හැකිය, නමුත් stdClass කිසිවක් නොකරන බැවින් ඔබට කිසිදු ප්රතිලාභයක් නොලැබේ.
stdclass යනු එක් ක්රමයකි php පංතියක යම් දත්තයක් තිබිය යුතු විට ස්ක්රිප්ට් අර්ථ නිරූපණය කිරීමෙන් වළකින්න, නමුත් අවාසනාවකට මෙම පන්තිය අර්ථ දක්වා නැත
උදාහරණයක් :
return $statement->fetchAll(PDO::FETCH_CLASS , 'Tasks');
මෙහිදී දත්ත පූර්ව නිශ්චිත 'කාර්යයන්' තුළට දමනු ලැබේ. නමුත්, අපි කේතය මේ ආකාරයට කළා නම්:
return $statement->fetchAll(PDO::FETCH_CLASS );
එවිට php ප්රති results ල දමනු ඇත 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 භාවිතා කරයි. : 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 හි සාමාන්ය අරාව ආශ්රිත අරාවකින් වෙන්කර හඳුනා ගැනීමට ක්රමයක් නොමැති වීමයි (ජාවාස්ක්රිප්ට් හි මෙන් ඔබට {}
වස්තුව []
සඳහා සහ ඒවා වෙන්කර හඳුනා ගැනීමට අරාව සඳහා).
එබැවින් මෙය හිස් වස්තූන් සඳහා ගැටළුවක් නිර්මාණය කරයි. උදාහරණයක් ලෙස මෙය ගන්න.
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 විචල්යය කේතනය කිරීමට ඔබට අවශ්ය යැයි සිතමු
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