💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ هادی قاسمی
objects +echo
جبار محمدی حل شده توسط جبار محمدی

سلام استاد

بعد از تبدیل آرایه ب object وقتی میخوام یک مقدار رو چاپ کنم ارور Trying to get property 'firstname' of non-object in میاد 

 

کدی ک میزنم اینه :

$abc = (OBJECT) $b;

echo ($b->user1->name->firstname);

 

سوالم اینه ک کلا نمیشه بعد از تبدیل ب object از echo استفاده کرد؟

توی گوگل هم سرچ کردم چیزی ک فهمیدم این بود ک این ارور وقتی ب وجود میاد ک ما مقداری از object رو میخواییم ک وجود نداره!! در حالی ک ساختار آرایه رو درست نوشتم

سلام دوست من از اکو میشه استفاده کرد فقط برای چاب یک مقدار درون ارایه با استفاده از کلید.

روش تبدیل شما اشتباه است.

شما یه ارایه انجمنی دارید که به صورت زیر است.

$a = [
    "user1" => [
        "name" => [
            "firsName" => "jabar",
            "lastName" => "mohammadi"
        ],
        "age" => 28
    ],
    "user2" => [
        "name" => [
            "firstName" => "ali",
            "lastName" => "amiri" 
        ],
        "age" => 31
    ]
];

 وقتی از کلید ابجکت برای تبدیل ارایه انجمنی استفاده میکنید خروجی این شکلی است.

stdClass Object
(
    [user1] => Array
        (
            [name] => Array
                (
                    [firsName] => jabar
                    [lastName] => mohammadi
                )
            [age] => 28
        )
    [user2] => Array
        (
            [name] => Array
                (
                    [firstName] => ali
                    [lastName] => amiri
                )
            [age] => 31
        )
)

اگه دقت کنید کلاس stdClass Object به کل ارایه داده شده ولی یوزرها همچنان ارایه هستند.عملا شما باید به روش ارایه به مقادیر دسترسی پیدا کنید: 

$b = (object) $a;
echo $b->user1['name']['firsName'];

برای اینکه بتونید یک ارایه انجمنی رو به ابجکت تبدیل کنید میتونید از توابع json_decode , json_encode استفاده کنید به این صورت:

با تابع json_encode ارایه رو به جیسون تبدیل میکنیم

$b = json_encode($a);
// print_r output : {"user1":{"name":{"firsName":"jabar","lastName":"mohammadi"},"age":28},"user2":{"name":{"firstName":"ali","lastName":"amiri"},"age":31}}

و بعد با تابع json_decode اونو به ابجکت  (یا ارایه انجمنی )  میتونیم تبدیل کنیم

$b = json_encode($a);
$c = json_decode($b);
// print_r($c) output: 
stdClass Object
(
    [user1] => stdClass Object
        (
            [name] => stdClass Object
                (
                    [firsName] => jabar
                    [lastName] => mohammadi
                )
            [age] => 28
        )
    [user2] => stdClass Object
        (
            [name] => stdClass Object
                (
                    [firstName] => ali
                    [lastName] => amiri
                )
            [age] => 31
        )
)

میتونید تفاوت خروجی‌ها رو هم ببینید.

الان میتونید به مقادیر دسترسی و با اکو چاپ کنید

echo $c->user1->name->firsName;

البته اقای صالحی تو php مقدماتی تو بخش ارایه‌ها فکر کنیم دراین باره توضیح داده بودند.

 

بهترین پاسخ
جبار محمدی ۳۱ فروردین ۱۳۹۹، ۲۰:۲۲