محسن مهری
4 سال پیش توسط محسن مهری مطرح شد
8 پاسخ

تعریف یک object به شکل javascript در php

سلام میخام توی php یک متغیر به نوع object های جاوااسکریپت تعریف کنم به طوری که با صدا زدن اسم مقدار داده اون نمایش داده بشه
(با اینکه میدونم کدهام کاملا اشتباست ولی مینویسم چی میخام!)
.

//in controller
$optional['option1']='condition1'];
$optional['option2']='condition2'];

//in blade
{{ $option->option1 }}//how this  possible?

ثبت پرسش جدید
محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
1

@mohsen.mehri6101
سلام.
به این نوع از دیتا، میگن آرایه که می تونید در این لینک درباره اون یاد بگیرید..
پیشنهاد می کنم اول PHP رو حداقل تا متوسط یاد بگیرید بعد برید سراغ لاراول یا فریمورک های دیگه.


احسان قربانی
تخصص : PHP ، در حال یادگیری لاراول ،...
@TimeRunner2359 4 سال پیش آپدیت شد
0

@mohsen.mehri6101
سلام و وقت بخیر
اصلا چرا می‌خواهید چنین کاری بکنید؟
وقتی نمیشه دیگه نمیشه چون بحث زبانه نه بحث تعریف چنین چیزی
اصلا زبان php فکر نکنم چنین قابلیتی داشته باشه
صدا زدن مقدار آرایه فقط به یک صورت ممکنه:

$array['index']=value

این متد برای صدا زدن متدهای کلاس‌هاست:

Class->method();

محسن مهری
تخصص : برنامه نویس back-end با زبان...
@mohsen.mehri6101 4 سال پیش آپدیت شد
0

سلام و تشکر
@TimeRunner2359
پس این داده ای که ما میفرستیم به یک صفحه ویو و به مقدار های اون به این صورت دسترسی داریم چه نوعه؟
@mohsenbostan
اما من میخام داده ها رو مثل زمانی که داده رو از یک جدول میگیریم و توی صفحه blade ازش استفاده میکنیم، به این صورت باشه

$user=User::all();
//thus in blade
{{ $user->name }}

AriaieBOY
تخصص : TALL Stack Lover
@ariaieboy 4 سال پیش مطرح شد
0

@mohsen.mehri6101
نگاه کنید داخل php به جای آبجکت های داخل جاوااسکریپت ما کلاس ها را داریم. معادل آبجکت داخل جاوااسکریپت میشه کلاس داخل php

برای اینکه به صورت آبجکتی بخواهید به اطلاعات یک متغیر دسترسی پیدا کنید میتونید به جای آرایه ها داخل php از کلاس stdClass استفاده کنید. یا اینکه کلاس مد نظر خودتون را بسازید و از اون استفاده کنید.
توی لینک زیرم نمونه کد آرایه ای نمونه کد stdclass و نمونه تبدیل آرایه به stdclass وجود داره.
https://www.geeksforgeeks.org/what-is-stdclass-in-php/

پیشنهادی که بهتون دارم این هست که نخواهید هرکاری که توی php انجام میدید شبیه جاوااسکریپت باشه چون بعضی جاها یا امکان پذیر نخواهد بود یا اینکه بهینه نیست.


احسان قربانی
تخصص : PHP ، در حال یادگیری لاراول ،...
@TimeRunner2359 4 سال پیش مطرح شد
0

@mohsen.mehri6101
آرایه است
@ariaieboy
حرف ایشون درسته ، هر زبانی باید به سینتکس و شیوه خودش نوشته بشه ، برای همین هم آرایه کار شما رو راه می‌اندازه


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

@mohsen.mehri6101
سلام
اگه منظورت اینه که بخوای به عناصر یک ارایه به صورت ابجکت دسترسی داشته باشی ,در php این کار به اسونی انجام شدنیه. دوره اموزشی ای که در باره php دیده بودم مدرس این موضوع شما رو به خوبی پیاده کرده بودن. الان من پیاده سازیشو حضور ذهن ندارم ولی این کار شدنیه.


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
2

@mohsen.mehri6101

در این مثالی که زدی.. این کار از طریق لاراول ممکنه:

$user=User::all();
{{ $user->name }}

شما در لاراول میتونی به صورت یک پراپرتی به این فیلد جدولت دسترسی داشته باشی.. چونکه در کلاس اصلی Model , که مدل های الکوئنت همه ازش ارث بری میکنند، از یه سری مجیک متدها (Magic methods) استفاده شده

مجیک متد ها توابع خاصی هستند که در جاهای خاص اجرا میشند. مثلا construct یکی از این مجیک متد هاست و هنگامی که کلاس Instantiate بشه، این تابع فراخوانی میشه یا destruct که عکسش عمل میکنه. متد های دیگه‌ای هم داریم مثل get و set و call و callStatic و ...

که لاراول برای این ویژگی از get__ استفاده میکنه.

/**
     * Dynamically retrieve attributes on the model.
     *
     * @param  string  $key
     * @return mixed
     */
    public function __get($key)
    {
        return $this->getAttribute($key);
    }

وجود متد get__ در تمام مدل های الکوئنت باعث میشه مراحل زیر اتفاق بیفته:

  • اگر اسم یه پراپرتی رو وارد کنی که وجود نداره، متد get__ اجرا میشه..
  • این متد هم متد getAttribute رو فراخوانی میکنه و نام پراپرتی رو بهش پاس میده
  • متد getAttribute چک میکنه و بنا بر اینکه آیا از Mutator استفاده شده یا نه ۲ متد مختلف رو فراخوانی میکنه
  • اگر از Mutator استفاده شده باشه متد getAttributeValue اجرا میشه و مقدار فیلد در نهایت به جای اون پراپرتی قرار میگیره
  • اگر از Mutator استفاده نشده باشه متد getRelationValue اجرا میشه و روابط بین مدل های الکوئنت بررسی میشه.

پس شما اگر بخواهی در PHP به این شکل دسترسی به پراپرتی هایی (که وجود ندارند) در یک کلاس داشته باشی، .. باید این ویژگی رو اضافه کنی. و این راه لاراول هست برای اینکه کاربر راحت باشه و به شکل یک پراپرتی بتونه مقدار فیلد جدول در دیتابیس رو بگیره.
کلاس اصلی Model در لاراول رو در آدرس (Illuminate\Database\Eloquent\Model) چک کن.


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

@ariaieboy

یک آبجکت در PHP: نمونه یا Instance ی از ساختار داده ای هست، که ما به شکل یک کلاس تعریف کردیم.
۱ بار کلاس رو تعریف و هر چقدر خواستیم از روش آبجکت میسازیم.

اما چون جاوااسکریپت بر اساس یک پارادایم آبجکت-محورانه توسعه داده شده. در جاوااسکریپت ما مستقیما آبجکت رو میسازیم.. و کلاس هایی هم که در ES6 به بالا داریم در واقع دارند از همون وراثت با prototype ها بهره میبرند.

با این تفاسیر ما مفهوم آبجکت رو در هر دو زبان داریم (هر چند کمی متفاوت).. اما مفهوم کلاس رو (به اون شکلی که شئ گرایی کامل رو داشته باشیم) در جاوااسکریپت نداریم.

پس ممکنه شباهت هایی بین آبجکت های Javascript و کلاس های PHP وجود داشته باشه.. اما در عین حال خیلی متفاوتند

JavaScript classes, introduced in ECMAScript 2015, are primarily syntactical sugar over JavaScript's existing prototype-based inheritance. The class syntax does not introduce a new object-oriented inheritance model to JavaScript.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام