objects +echo

پرسیده شده
فعالیت 1471 روز پیش
دیده شده 661 بار
0

سلام استاد

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

 

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

$abc = (OBJECT) $b;

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

 

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

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

فایل پیوست

هادی قاسمی
هادی قاسمی

31 فروردین 99

3

مورد تایید استاد

حذف شده

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

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

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

$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 مقدماتی تو بخش ارایه ها فکر کنیم دراین باره توضیح داده بودند.

 

فایل پیوست

جبار محمدی

توسط

جبار محمدی

31 فروردین 99

حذف شده
بله حرفتون درسته من فک میکردم مستقیم میشه از ابجکت ها استفاده کرد بدون استفاده از encode ها ک فهمیدم اشتباه است ممنون
هادی قاسمی

31 فروردین 99

حذف شده
خواهش میکنم دوست من.برای ارایه ها یک بعدی میشه.ببخشید که بجای استاد جواب دادم.
جبار محمدی

31 فروردین 99

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

2 اردیبهشت 99