۵ phpJunior
stdClass سوال
جامعه پی اچ پی ایجاد شده در ۲۱ خرداد ۱۴۰۲

عرض ادب،خسته نباشید.

یک سوال داشتم زمانی که میخوایم یک value از stdClass فراخونی کنیم متوجه نشدم دلیل استفاده از {} چی هست.

    ;echo($jsonUsersDe->{1}->name->nickname)

و یک سوال دیگه ,فرقی نیکنه String باشه یا Integ در هرصورت در {} قرار میگیره؟

$users = array(
    1 => [
        "name" => [
            "firstname" => "Mamad",
            "lastname" => "Ghiami",
            "nickname" => "golMamad"
        ],
        "E-mail" => "mamad45@gmail.com",
        "Username" => "mamadgholi"
    ],
    2 => [
        "name" => "xahra",
        "E-mail" => "mxahar45@yahoo.com",
        "Username" => "zahra898"
    ],
    3 => [
        "name" => "Erfan",
        "E-mail" => "efi2000@yahoo.com",
        "Username" => "Eeeerf"
    ]
    );

سلام

برای این موار که به ایندکسی از آرایه یا متغیری رو میخوایم درون استرینگی قرار بدیم برای اینکه به خطای تایپ و مشکل در پردازش نشیم این مورد رو رعایت کنیم بهتره اما در مواردی میتونید این مورد رو در نظر نگیرید؛در این مورد به دلیل اینکه یک کلید ما اینتجر هست باید رعایت بشه.

در واقع با این کار به مفسر میفهمونید که به یک عنصر یک شی میخواید دسترسی داشته باشید.

احمدرضا فاطمی کیا ۲۱ خرداد ۱۴۰۲، ۱۸:۴۶

ممنون از پاسخ شما جناب فاطمی کیا


یک مورد دیگه , زمانی که ما اول Array رو encode میکنیم و سپس decode امکان استفاده از دستور زیر برای اکو کردن دیتا وجود داره:

echo($users_obj->{1}->name->nickname);

اما زمانی از تابع زیر استفاده میکنیم . تمام اجزا array به object تبدیل نمیشن و فقط امکان دسترسی به index‌ها برای اکو کردن وجود داره.

(object) $users;

داخل صفحه وب ههم با این اررور مواجه میشم

Warning: Attempt to read property "name" on array in F:\\Xampp\\htdocs\\7Learn.php\\05-arrays-and-assoc\\index.php on line 74
Warning: Attempt to read property "nickname" on null in F:\\Xampp\\htdocs\\7Learn.php\\05-arrays-and-assoc\\index.php on line 74

تفاوت خروجی encode to decode و تابع (object):

Encode to Decode:

stdClass Object ( [1] => stdClass Object ( [name] => stdClass Object ( [firstname] => Mohammad [lastname] => naghiani [nickname] => golMamad ) [username] => Mamad1374 [email] => mamad5678@gmail.com ) [2] => stdClass Object ( [name] => stdClass Object ( [firstname] => ali [lastname] => fatahi [nickname] => AliJoon12 ) [username] => Aliali89 [email] => ali123@yahoo.com.com ) [3] => stdClass Object ( [name] => stdClass Object ( [firstname] => Roxana [lastname] => karampoor [nickname] => Roxi090 ) [username] => roro6767 [email] => roro6767@gmail.com ) )

(object):

stdClass Object ( [1] => Array ( [name] => Array ( [firstname] => Mohammad [lastname] => naghiani [nickname] => golMamad ) [username] => Mamad1374 [email] => mamad5678@gmail.com ) [2] => Array ( [name] => Array ( [firstname] => ali [lastname] => fatahi [nickname] => AliJoon12 ) [username] => Aliali89 [email] => ali123@yahoo.com.com ) [3] => Array ( [name] => Array ( [firstname] => Roxana [lastname] => karampoor [nickname] => Roxi090 ) [username] => roro6767 [email] => roro6767@gmail.com ) )

ممنون از توجه شما




phpJunior ۲۱ خرداد ۱۴۰۲، ۲۰:۲۸

دستور json encode تمام ایندکس‌ها رو به جیسون تبدیل میکنه و دیکدش هم تبدیل به آبجکت.

اما وقتی cast میکنید به آبجکت فقط عضو اول تبدیل میشه.

بهترین پاسخ
احمدرضا فاطمی کیا ۲۲ خرداد ۱۴۰۲، ۱۴:۰۵

درسته من هم سوالم همینه. عرض کردم فقط عضو‌های اول تبدیل به ابجکت میشن. اما توی این درس به عنوان راه حل پیشنهادش دادن که عملی نیست.

الان که توی درس if به همین مورد برخورد کردن که راه حل استفاده از cast (object) رو پیشنهاد دادن که با این هم مجددا امکان دسترسی وجود نداره و زمان echo گزفتن null برگشت داده میشه.

در اخر اشاره کردن که یک درس اختصاص میدن به شیوه راحت برای تبدیل به ابجکت اما زمانی که توی این درس میان همچین چیزی رو به عنوان راه حل و یک شیوه عملی پیشنهاد میدن تناقض وجود داره و برای من مبتدی بسیار گیج کننده هست. یعنی مدرس بنده اطلاع ندارن این روش عملی نیست؟



$users = (object) array(
    1 => [
        "name" => (object)[
            "firstname" => "Mamad",
            "lastname" => "Ghiami",
            "nickname" => "golMamad"
        ],
        "role" => "admin",
        "E-mail" => "mamad45@gmail.com",
        "Username" => "mamadgholi"
    ],
    2 => (object)[
        "name" => "xahra",
        "role" => "author",
        "E-mail" => "mxahar45@yahoo.com",
        "Username" => "zahra898"
    ],
    3 => (object)[
        "role" => "co-admin",
        "name" => "Erfan",
        "E-mail" => "efi2000@yahoo.com",
        "Username" => "Eeeerf"
    ]
    );
        if ($users->{1}->role == "admin") {
            echo "

Hello, You've logged-in as administrator.

"
; } else{ echo "Sorry, You do not have admin permission to access this page."; }







phpJunior ۲۲ خرداد ۱۴۰۲، ۱۶:۱۲

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

ممنون از پاسخگویی شما.

phpJunior ۲۲ خرداد ۱۴۰۲، ۱۶:۳۰