PHP හි stdClass යනු කුමක්ද?


Answers:


790

stdClassPHP හි සාමාන්‍ය හිස් පංතිය, Objectජාවා හෝ objectපයිතන් වැනි ය ( සංස්කරණය කරන්න: නමුත් ඇත්ත වශයෙන්ම විශ්වීය මූලික පන්තියක් ලෙස භාවිතා නොවේ; මෙය පෙන්වා දීම ගැන ස්තූතියි .

එය නිර්නාමික වස්තු, ගතික ගුණාංග ආදිය සඳහා ප්‍රයෝජනවත් වේ.

සහායක අරා සඳහා විකල්පයක් ලෙස StdClass සලකා බැලීමට පහසු ක්‍රමයක්. පහත දැක්වෙන උදාහරණය බලන්න, json_decode()එය StdClass නිදසුනක් හෝ සහායක අරාවක් ලබා ගැනීමට ඉඩ දෙන්නේ කෙසේද යන්න පෙන්වයි . මෙම උදාහරණයේ පෙන්වා නැති නමුත් SoapClient::__soapCallStdClass උදාහරණයක් ලබා දෙයි.

<?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 හි ගතික ගුණාංග බලන්න .


7
සමහර විට ඔහු mysql_fetch_object භාවිතා කර ඇත. මම වරදවා වටහා නොගත්තොත් එය stdlcass හි අවස්ථාවක් නිර්මාණය කරයි.
ගැලන්

69
එය ජාවාගේ වස්තුවෙහි මූලික පන්තියක් නොවේ, මගේ පිළිතුර පහත බලන්න.
Ciaran McNulty

1
පයිතන්හි ඇති “සියලු” වස්තූන්ගේ ව්‍යුත්පන්න පන්තිය නොවන බව ඔබ දන්නා බව මම විශ්වාස කරමි ... අවම වශයෙන්, ඔබට පයිතන් 3.0 හි වස්තුවෙන් ව්‍යුත්පන්න වීමට බල කරන තුරු නොවේ
මොනොක්‍රොම්

12
මම හිතන්නේ මිනිස්සු කියන්න ඕනේ stdClass කියන්නේ ජාවාස්ක්‍රිප්ට් {}සෑදීම වගේ දෙයක් .
පෘථිවි එන්ජිම

1
සර්, ලිපිය වැරදියි නිසා ඔබේ පිළිතුර අර්ධ වශයෙන් වැරදියි. මෙම පංතිය දීර් ing කිරීමෙන් ඔබට ලබා දෙන එකම (සහ මෙයද වැරදියි) එය ඉඟියක් ටයිප් කිරීමට විකල්පයකි, එනම් වස්තුවක් function(StdClass $a, array $params)තිබේදැයි පරීක්ෂා කිරීම එදිරිව . $ainstanceof
Dejan Marjanović

1116

stdClassයනු වෙනත් වර්ගවල වස්තු වලට වාත්තු කිරීමේදී භාවිතා කරන සාමාන්‍ය 'හිස්' පන්තියකි. අනෙක් පිළිතුරු දෙකක් කියන දේ නොතකා, stdClassනොහැකි PHP හි වස්තූන් සඳහා මූලික පදනමක් පන්තියේ. මෙය තරමක් පහසුවෙන් නිරූපණය කළ හැකිය:

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

PHP හි මූලික වස්තුවක සංකල්පයක් ඇතැයි මම විශ්වාස නොකරමි


4
std යන්නෙන් අදහස් කරන්නේ කුමක්ද?
ඇඩම් වේට්


1
එය උපයෝගිතා පන්තියක්! ඇත්ත ප්‍රකාශය මෙයයි!
ගුස්ටාව්

16
ඇත්ත වශයෙන්ම, කේත ස්නිපටයෙන් පසු පළමු වාක්‍යය ප්‍රශ්නයට පිළිතුරු සපයයි.
මෝගන්රා

2
@ මිරෝ මාකරවානස්: ගතික ගුණාංගවලට STDClass පමණක් නොව PHP හි ඕනෑම පන්තියකට පැවරිය හැකිය.
ස්ටැන්

95

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();

3
පේළි සමඟ වැඩ කරන ප්‍රයෝජනවත් කාර්යයන් සහිත හිස් පන්තියක්, එහි වඩා හොඳ කේතීකරණ ප්‍රමිතියක්
බෝරල්

1
එය අරාව භාවිතා කිරීම හා සමාන වේ. ඇත්ත වශයෙන්ම STDclass ජනනය කරනුයේ අරාව සිට වස්තු පරිවර්තනය වැනි ජගුබ්ලිං කරන අවස්ථාවේදී ය.
varuog

1
කරුණාකර ඔබේ කේතයේ
යතුරු ලියනයක

7
"ඔබට නිර්නාමික PHP පන්තියක් නිර්මාණය කළ හැකිය" - එය නිර්නාමික පන්තියක් නොවේ . ඔබට instanceof, get_class, ...
ජෝන් ස්මිත්

2
PHP ඇත්ත වශයෙන්ම නිර්නාමික පංති ඇති බැවින් මෙම පිළිතුර විශේෂයෙන් අවුල් සහගතය stdClass.
IMSoP

59

තවද, stdClassවස්තුවක් භාවිතයෙන් ද නිර්මාණය කළ හැකිය json_decode().


5
සැබෑ. අවශ්‍ය විටදී අරාව වස්තුවට අරාව බවට පරිවර්තනය කිරීම සඳහා මම නිතරම json_encode සහ json_decode භාවිතා කරමි.
pinkal vansia

6
$ x = json_decode (json_encode ($ object), සත්‍ය) වස්තුව අරාවකට විකේතනය කරයි, නමුත් එය ද්විමය ආරක්ෂිත නොවේ. අත්‍යවශ්‍යයෙන්ම එය සාමාන්‍ය පෙළ නොවේ නම් එය JSON හි කැඩී යා හැක.
simontemplar

IMsimontemplar PHP හි ඔබ ලිවිය යුතු නැත True. බූලියන් යනු කුඩා අකුරු trueහෝ false.
BadHorsie

2
imsimontemplar අත්පොත එසේ නොවේ, නමුත් PSR-2 එසේ කරයි, එබැවින් ඔබ කිසියම් ප්‍රමිතියක් අනුගමනය කරන්නේ නම් එය කුඩා අකුරින් විය යුතුය. ඔබට එය ලිවීමට අවශ්‍ය නම් එය වලංගු නමුත් ඔබ ප්‍රමිතීන් අනුගමනය කළ යුතුය. බූලියන් සඳහා වන අතින් ලියකියවිලි අතිශයින් පැරණි වනු ඇත, බොහෝ විට ප්‍රමිති සැකසීමට පෙර ලියා ඇත. අවංකව කියමු, PHP මුලින් ලියා ඇත්තේ කිසිදු ප්‍රමිතියක් නොමැතිව සම්පූර්ණ අවුලක් ලෙස ය (පුළුල් පරාසයක විචල්ය / ශ්‍රිත / වස්තු නම් කිරීමේ සම්මුතීන් බලන්න). සංවර්ධකයා ඔබේ ආකෘතිය භාවිතා කළ කිසිදු PHP කේතයක් මම අවංකවම දැක නැත.
BadHorsie

2
සත්‍ය / අසත්‍ය / ශූන්‍යය හැරුණු කොට මම PSR-2 අනුගමනය කරමි. ඒ හැර, මම ගණන් ගන්නේ නැහැ. වෙනත් කෙනෙකුගේ කේතය කවදා හෝ සංස්කරණය කරන්නේ නම්, ඔවුන් භාවිතා කරන ඕනෑම ප්‍රමිතියක් මම අනුගමනය කරමි (ඇත්නම්, සාමාන්‍යයෙන් කිසිවක් නැත) සහ මා එය අසමත් වුවහොත්, PSR-2 “නිවැරදි” මාර්ගය කරන්න. වචන තුනක් ප්‍රාග්ධනීකරණය කිරීම මගේ කනස්සල්ලෙන් අවම බව දෙවියන්ගේ භයානක කේත ඕනෑ තරම් තිබේ.
simontemplar

26

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";

ඔබ ජූම්ලා සංවර්ධකයෙක් නම් වැඩිදුර අවබෝධ කර ගැනීම සඳහා මෙම උදාහරණය ජූම්ලා ලේඛනයේ බලන්න .


25

එලෙසම,

$myNewObj->setNewVar = 'newVal'; 

stdClass වස්තුවක් ලබා දෙයි - ස්වයංක්‍රීයව වාත්තු කිරීම

මම මෙය අද අක්ෂර වින්‍යාසය මඟින් සොයාගත්තා:

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

සිසිල්!


9
නමුත් මෙය E_NOTICE
Petah

3
EtPetah PHP 5.3+ හි පමණක් වුවද හරිද? නමුත් ඔව්, එය නරක පුරුද්දකි.
ක්‍රිස්ටොකිවි

15

stdClass යනු නිර්නාමික පන්තියක් හෝ නිර්නාමික වස්තුවක් නොවේ

මෙහි පිළිතුරු වලට stdClassනිර්නාමික පංතියක් හෝ නිර්නාමික වස්තුවක් වන ප්‍රකාශන ඇතුළත් වේ . එය සත්‍යයක් නොවේ.

stdClassසාමාන්‍ය පූර්ව නිශ්චිත පන්තියක් පමණි. instanceofක්‍රියාකරු හෝ ශ්‍රිතය භාවිතයෙන් ඔබට මෙය පරීක්ෂා කළ හැකිය get_class. විශේෂ කිසිවක් මෙහි නැත. වෙනත් අගයන් විරෝධය දැක්වීමේදී PHP මෙම පන්තිය භාවිතා කරයි.

බොහෝ අවස්ථාවන්හිදී stdClassක්‍රමලේඛකයින් විසින් අරාව වඩා හොඳ විකල්පයක් වන්නේ ප්‍රයෝජනවත් කාර්යයන් සහ මෙම භාවිත කේතය නිරූපණය කරන්නේ දත්ත ව්‍යුහය සැබෑ වස්තුවක් නොවන බැවිනි.


8

වාත්තු කිරීම භාවිතා කිරීමෙන් ඔබට සැබවින්ම “බන්ඩුල” දුන් පිළිතුරෙහි මෙන් වස්තුවක් නිර්මාණය කිරීමට අවශ්‍ය නොවන බව ද සඳහන් කිරීම වටී. ඒ වෙනුවට ඔබට ඔබේ අරාව වස්තුවකට දැමිය හැකි අතර stdClass නැවත ලබා දෙනු ලැබේ. උදාහරණයක් වශයෙන්:

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

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

Output: again


ඒකට කැමති. බොහෝ පිරිසිදුයි!
වෙබ්ස්පැනර්

7

ඇත්තටම මම හිස් stdClass නිර්මාණය කිරීමට උත්සාහ කළ අතර වේගය හිස් පන්තියට සංසන්දනය කළෙමි.

class emp{}

පසුව stdClasses සහ emps 1000 ක් නිර්මාණය කරමින් ... හිස් පන්ති මයික්‍රෝ තත්පර 1100 කින් පමණ සිදු කරන ලද අතර stdClasses මයික්‍රෝ තත්පර 1700 ක් ලබා ගත්තේය. ඒ නිසා ඔබට එතරම් නරක ලෙස වස්තූන් භාවිතා කිරීමට අවශ්‍ය නම් දත්ත ගබඩා කිරීම සඳහා ඔබේම ව්‍යාජ පන්තියක් නිර්මාණය කිරීම වඩා හොඳ යැයි මම සිතමි (අරා ලිවීම සහ කියවීම යන දෙකටම වඩා වේගවත් වේ).


22
පෙනෙන විදිහට වෙනස සිදුවන්නේ නම දිගෙහි වෙනසයි. ඔබ පන්තිය "averylongclassnamefornoapparentreason" ලෙස හැඳින්වුවහොත්, එය නිර්මාණය කිරීමට බොහෝ කාලයක් ගතවනු ඇත. ඉතින් යන්න රූපය.
අග්ගිස්

27
හ්ම් ... නොමේරූ ප්‍රශස්තකරණය. මයික්‍රෝ තත්පර 600 ක් ඉතිරි කර ගැනීමට වඩා කාලය ගත කරනවාට වඩා වේගය ගැන සැබවින්ම සැලකිලිමත් වන්නේ නම් සංකීර්ණ SQL විමසුම් හෝ වෙනත් ජාල බාධක සොයා ගැනීමට මම කැමැත්තෙමි. ඇත්ත වශයෙන්ම, මම පළමුව පරීක්ෂා කර බැලීමට කැමතියි ජාවාස්ක්‍රිප්ට් එක පාදයේ පාදයේ තිබේදැයි සැලකිලිමත් වීමට වඩා එකක් මයික්‍රෝ තත්පර 600 ක් වේගයෙන් අනෙකට වඩා වේගවත්ද යන්න.
ආර්ඩී අරම්

6
විශ්වාසනීය මිණුම් ලකුණක් සඳහා 1000 ඉතා කුඩාය. බිලියනයක් උත්සාහ කරන්න.
rightfold

1
PHP ලෝකයේ සෑම විටම පාහේ අරා භාවිතා කිරීම වඩා හොඳය.
වහීඩ් අමිරි

^ නිසැකවම එසේ නොවේ. අරේ නිරය යනු විශාල ව්‍යාපෘතියක කණ්ඩායමක වැඩ කරන විට බියකරු සිහිනයකි.
ඩේවි ඩේව්

6

භාවිතයේ ඇති stdClass වස්තු

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"]);

දෝංකාර දෙයි

ජෝන් ඩෝ


5

පොතක් පිළිබඳ දත්ත කිහිපයක් රඳවා ගැනීමට ඔබට ඉක්මනින් නව වස්තුවක් නිර්මාණය කිරීමට අවශ්‍ය නම්. ඔබ මේ වගේ දෙයක් කරයි:

$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/ වැඩි විස්තර සඳහා.


4

හිස් 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 >

එය එකම අවස්ථාවක් නොවන නිසා, එර්ගෝ එයට එකිනෙකට සමාන විය නොහැක. පංති තදින් සංසන්දනය කිරීම උදාහරණ හඳුනා ගැනීම සමඟ ක්‍රියා කරයි. ඕනෑම පන්තියක සෑම අවස්ථාවකම අද්විතීය හැඳුනුම්පතක් ඇත.
බෙඩ්නික්

3

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 කිසිවක් නොකරන බැවින් ඔබට කිසිදු ප්‍රතිලාභයක් නොලැබේ.


3

යනු එක් ක්‍රමයකි පංතියක යම් දත්තයක් තිබිය යුතු විට ස්ක්‍රිප්ට් අර්ථ නිරූපණය කිරීමෙන් වළකින්න, නමුත් අවාසනාවකට මෙම පන්තිය අර්ථ දක්වා නැත

උදාහරණයක් :

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

මෙහිදී දත්ත පූර්ව නිශ්චිත 'කාර්යයන්' තුළට දමනු ලැබේ. නමුත්, අපි කේතය මේ ආකාරයට කළා නම්:

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

එවිට ප්‍රති results ල දමනු ඇත .

සරලවම මෙසේ කියයි: බලන්න, අපට හොඳ කිඩ්ස් [වස්තු] මෙහි ඇත, නමුත් දෙමව්පියන් නොමැතිව. ඉතින්, අපි ඔවුන්ව ළදරු ළමා රැකවරණ නිවාසයකට යවමු :)


2

ඔබට කැමති 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];

බොහෝ ගුණාංග සහිත වස්තු ආරම්භ කිරීම සඳහා දෙවන ක්‍රමය බොහෝ දුරට ප්‍රයෝජනවත් වේ.


1

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

අරාව ශෛලිය වෙනුවට වස්තු ශෛලිය භාවිතා කිරීම ගැන යමෙකුට සිතීමට හේතුව කුමක්ද ???


0

අපට 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.