توابع compact و extract در PHP

توابع compact و extract در PHP

اولین بار فانکشن compact را در فریم‌ورک لاراول استفاده کردم و برای ارسال اطلاعات به ویو، چنین چیزی داشتیم:$posts = Post::all();
return view(‘view_name’, compact(‘posts’);کار این فانکشن این است که متغیرهایی را دریافت می‌کند و آنها را در آرایه‌ای می‌ریزد؛ نام هر متغیر key و مقدار آن value می‌شود. به این مثال دقت کنید:$name = ‘John’;
$age = 27;
$arr = compact(‘name’, ‘age’);
echo ‘Your name is ‘ . $arr[‘name’] . ‘ and you are ‘ . $arr[‘age’];فانکشن compact می‌تواند حداقل یک پارامتر بگیرد و هر پارامتر، نام یک متغیر است. شما می‌توانید پارامترها را به صورت رشته‌هایی که هر کدام نام یک متغیر باشند وارد کنید (مانند مثالی که گذشت) و یا اینکه از آرایه‌ای از رشته‌ها استفاده کنید و خروجی نیز همانطور که مشاهده کردید، یک آرایه است.این فانکشن، برعکس compact عمل می‌کند و از یک آرایه، متغیرهایی می‌سازد. نام هر متغیر، از کلیدهای آرایه (keys) گرفته شده و مقدار متغیر به مقادیر (values) بستگی دارد.$arr = [
‘name’ => ‘john’,
‘age’ => 27
];

extract($arr);
echo $name . ‘ is ‘ . $age;پارامتر دوم این فانکشن، اختیاری و مربوط به flagهاست:فلگ EXTR_OVERWRITE: اگر متغیری به همان نام موجود باشد، آنچه درون آرایه باشد را جایگزین می‌کند.فلگ EXTR_SKIP: اگر متغیری به همان نام موجود باشد، جایگزینی رخ نمی‌دهد.فلگ EXTR_PREFIX_SAME: اگر تداخلی باشد، به آنچه درون آرایه باشد، پیشوندی اختصاص می‌دهد. پیشوند، پارامتر سوم است و اگر برای مثال کلید آرایه age$ باشد و پیشوند’new’ را برای پارامتر سوم در نظر گرفته باشیم، مقدار آن کلید در متغیر new_age$ ریخته می‌شود.فلگ EXTR_PREFIX_ALL: چه تداخلی باشد و چه نباشد، از طریق پارامتر سوم به تمامی متغیرها یک پیشوند اختصاص می‌دهد.برای مشاهده‌ی دیگر فلگ‌ها به برگه‌ی مربوط به extract در مستندات PHP مراجعه کنید.کلاسی به نام View ساخته‌ایم که با استفاده از compact و extract می‌تواند یک قالب را با داده‌های واردشده نشان دهد:$title = ‘Hello, world!’;
$author = ‘WebPajooh’;
View::make(‘view1’, compact(‘title’, ‘author’));کدهای این مثال را به طور کامل در این مخزن آپلود کرده‌ام و دیدن کدهای کوتاه اما مهم View.php را توصیه می‌کنم.اگر ورودی این فانکشن را از کاربر بگیرید، خطر در کمین شماست! در مستندات آمده است:Warning: Do not use extract() on untrusted data, like user input (i.e. $_GET, $_FILES, etc.). If you do, for example if you want to temporarily run old code that relied on register_globals, make sure you use one of the non-overwriting flags values such as EXTR_SKIP and be aware that you should extract in the same order that’s defined in variables_order within the php.ini.هشدار داده است که از extract، روی داده‌های غیر قابل اعتماد مانند ورودی‌هایی که از کاربران می‌گیرید استفاده نکنید و اگر استفاده کردید، فلگی چون EXTR_SKIP را فراموش نکنید!

Author: admin

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *