آشنایی با کلاس Fluent در لاراول

405 بازدید 2 سال قبل 0 دیدگاه

توی دنیای php ما دو نوع متفاوت از دسترسی به داده ها رو در آرایه ها و آبجکت ها تجربه می کنیم.

نحوه دسترسی به المان های آرایه معروف هست به array notation و در آبجکت ها هم با dot notation شناخته میشه

$course = [
    'id' => 1,
    'title' => 'laraplus laravel crash course',
    'price' => 250000
];

// array notation 
echo $course['title']

$post = (object) [
    'id' => 2,
    'title' => 'how to become fluent in laravel - Laraplus',
    'author' => 'sirvan monfared'
];

// dot notation
echo $post->author

در کد بالا ما متغیر course$ رو از نوع آرایه در نظر گرفتیم و زیر اون نحوه دسترسی به المان های اون با استفاده از array notation رو نشون دادیم. همینطور متغیر post$ رو از نوع آبجکت (stdClass) تعریف کردیم و نحوه دسترسی به المان این آبجکت با استفاده از dot notation رو توضیح دادیم.

مشکل اینجاست که اگه برای آرایه یا آبجکت اگر بخوایم به المانی که وجود نداره دسترسی پیدا کنیم یا از notation اشتباه برای دسترسی به المان های استفاده کنیم به ارور برخورد میکنیم. مثلا برای کدهای بالا:

echo $course['name'];

// undefined array key 'name'

echo $post['author']
// can not use object of type stdClass as array

همونطور که میبینی کارکردن با آرایه ها یا میکس کردن آبجکت ها و آرایه ها گاهی اوقات میتونه پرریسک باشه. بهتر نیست یک روش یکسان برای دسترسی به المان های آرایه ها و آبجکت ها داشته باشیم بدون اینکه نگران استفاده از نوتیشن اشتباه یا ارورها باشیم؟

خب کلاس Fluent دقیقا برای همین کار خلق شده.

ساخت آبجکت Fluent در لاراول

استفاده از کلاس Fluent در بعضی مواقع میتونه نسبت به استفاده از آرایه ها برتری داشته باشه. چون به شما اجازه میده برای دسترسی به المان ها، از dot notation استفاده کنید

کلاس Fluent در نیم اسپیس Illuminate\Support تعریف شده و همونطور که در کدهای زیر میبینید، از اینترفیس های Arrayable, ArrayAccess, Jsonable و JsonSerializable استفاده میکنه

<?php

namespace Illuminate\Support;

use ArrayAccess;
use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Contracts\Support\Jsonable;
use JsonSerializable;

class Fluent implements Arrayable, ArrayAccess, Jsonable, JsonSerializable
{
}

وقتی از کلاس Fluent استفاده میکنی بهت اجازه میده که برای دسترسی به المان ها از هر دو حالت array notation و dot notation استفاده کنی. بذار چند تا مثال از نحوه استفاده از کلاس Fluent در لاراول رو ببینیم:

ساخت آبجکت Fluent با متد make در لاراول

برای اینکه یک آبجکت جدید از کلاس Fluent بسازی میتونی از متد make استفاده کنی

$course = new Fluent::make([
    'id' => 1,
    'title' => 'laraplus laravel crash course',
    'price' => 250000
]);

حالا میتونی با هر دو روش، به پراپرتی های اون دسترسی پیدا کنی:

echo $course->title;
// laraplus laravel crash course

echo $course['title'];
// laraplus laravel crash course

حتی میتونی آرایه ها و آبجکت هایی که از قبل داشتی رو هم با روش زیر به Fluent تبدیل کنی:

$params = [
    'id' => 1,
    'title' => 'laraplus laravel crash course',
    'price' => 250000
];
$course = new Fluent($params);


$params2 = (object) [
    'id' => 2,
    'title' => 'how to become fluent in laravel - Laraplus',
    'author' => 'sirvan monfared'
];

$post = new Fluent($params2);

echo $product['title'];
// or
echo $post['title'];

حالا به نظرت اگر بخوایم در Fluent ها، به یک پراپرتی که وجود نداره دسترسی پیدا کنیم چه اتفاقی میفته؟ برخلاف آرایه و آبجکت های عادی، اینجا دیگه خبری از ارور و Exception نیست و در صورت وجود نداشتن پراپرتی، مقدار null برگردونده میشه

$course->duration
// null

تغییر پارامترها در Fluent

با کلاس نه تنها میتونی به پراپرتی ها دسترسی پیدا کنی، بلکه میتونی مقدار اونها رو تغییر بدی یا حذفشون کنی و این کار هم با هر دو حالت array notation و dot notation امکان پذیره:

$params = [
    'id' => 1,
    'title' => 'laraplus laravel crash course',
    'price' => 250000
];

$course = new Fluent($params);


$course['price'] = 12000;

// or

$course->title = 'a new course by sirvan';

برای حذف پرارتی ها هم میتونی از دستور unset استفاده کنی

unset($post['author']);

// or

unset($post->author);

ساخت آبجکت Fluent با استفاده از Fluent Api در لاراول

یک روش دیگه هم برای ساخت آبجکت Fluent وجود داره و اون هم استفاده از Fluent Api هست. اینطوری:

$course = (new Fluent)
            ->id(1)
            ->name('laravel crash course')
            ->price(150000);

نتیجه گیری

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

 

ممنون میشم که نظرت رو در مورد این مطلب در بخش دیدگاه ها بهم بگی

0 دیدگاه   (ارسال دیدگاه)