تابع current() در PHP
تابع current() یکی از توابع پایهای برای کار با آرایهها در PHP است که مقدار عنصری را که نشانگر داخلی (internal pointer) آرایه روی آن قرار دارد، باز میگرداند. این تابع بهویژه زمانی مفید است که بخواهیم موقعیت جاری در آرایه را بدون تغییر آن بررسی کنیم یا با توابعی مانند next() و prev() موقعیت را جابهجا کنیم.
نحو و مقدار بازگشتی
نحو تابع به صورت زیر است:
mixed current(array &$array)توضیح: current مقدار عنصر جاری را برمیگرداند. اگر آرایه تهی باشد یا اشارهگر خارج از محدوده باشد، مقدار FALSE برمیگردد. البته چون ممکن است مقدار واقعی عنصر هم FALSE باشد، بهتر است برای تشخیص موفقیت از تابع === استفاده شود.
ویژگیها و نکات کلیدی
- اشارهگر داخلی: هر آرایه در PHP یک اشارهگر داخلی دارد که با reset(), next(), prev(), end() تغییر میکند.
- عدم تغییر اشارهگر: current() اشارهگر را جابهجا نمیکند — فقط مقدار را خوانده و برمیگرداند.
- مقایسه با foreach: استفاده از current/next مفید است وقتی نیاز به کنترل دستی روی اشارهگر داریم؛ اما برای اغلب موارد تکرار بهتر است از foreach استفاده شود.
- سازگاری با Iterator: اگر با شیئی از نوع Iterator کار میکنید، از current() آرایهای استفاده نمیشود؛ باید متدهای اینترفیس Iterator را به کار ببرید.
- برگشت مقادیر FALSE: برای تشخیص آیا عنصر واقعی FALSE است یا آرایه خالی، از
===استفاده کنید.
مثالهای عملی
$arr = ['a' => 10, 'b' => 20, 'c' => 30];
echo current($arr); // 10
next($arr);
echo current($arr); // 20
reset($arr);
echo current($arr); // 10
$empty = [];
var_dump(current($empty)); // bool(false)شرح: در این مثال ابتدا مقدار عنصر جاری آرایه که کلید ‘a’ و مقدار 10 است چاپ میشود. سپس با next() اشارهگر یک پله جلو میرود و مقدار بعدی چاپ میشود. reset() اشارهگر را به ابتدای آرایه بازمیگرداند. در آرایهٔ خالی current مقدار بولی false بازمیگرداند.
مثال کاربردی — پیمایش کنترلشده آرایه
$arr = [100, 200, false, 400];
reset($arr);
while (($value = current($arr)) !== false) {
echo $value . PHP_EOL;
next($arr);
}شرح: این حلقه تا زمانی که مقدار جاری آرایه برابر false نباشد ادامه مییابد. توجه کنید که اگر یک عنصر واقعی برابر false باشد (همانطور که سومین عنصر مثال اینگونه است) حلقه قبل از رسیدن به ادامهٔ آرایه متوقف میشود؛ بنابراین این الگو هنگامی مناسب است که میدانید عناصر آرایه هرگز false واقعی ندارند یا از روش دیگری برای تشخیص انتهای آرایه استفاده کنید.
نسخهٔ اصلاحشده برای حضور مقادیر false واقعی
$arr = [100, 200, false, 400];
reset($arr);
while (key($arr) !== null) {
$value = current($arr);
echo $value . PHP_EOL;
next($arr);
}شرح: این نسخه از خروجی تابع key() بهره میبرد؛ چون key() برای پایان آرایه مقدار null میدهد و این روش با وجود مقادیر false واقعی در آرایه کار میکند.
مقایسه current() با foreach و مزایا/معایب
- foreach: ساده، خوانا، کمتر خطاپذیر و سریع برای اغلب نیازهای پیمایش آرایه.
- current/next: کنترل دقیق روی اشارهگر، امکان همزمانی خواندن و جابهجایی، مفید وقتی نیاز به توقف/ادامه در وسط پیمایش یا تغییر اشارهگر از جای دیگر وجود دارد.
- قابلیت خطا: استفاده نادرست از current و next میتواند باعث رفتار غیرمنتظره شود — بهخصوص وقتی کدهای مختلف روی یک آرایه کار میکنند و اشارهگر را تغییر میدهند.
نمونه جدول بازگشتیها و رفتارها
| وضعیت آرایه | current() | توضیح |
|---|---|---|
| آرایه با عنصر جاری | مقدار عنصر | مقدار واقعی عنصری که اشارهگر روی آن است |
| آرایه خالی | FALSE | هیچ عنصری وجود ندارد |
| اشارهگر خارج از محدوده (بعد از end()) | FALSE | هیچ عنصر جاریای قابل برگشت نیست |
بهترین شیوهها و نکات امنیتی
- همیشه برای تشخیص معتبر بودن مقدار از مقایسه سفت و سخت (
===) استفاده کنید. - اگر روی آرایهای همزمان چندین تابع/قسمت کد کار میکنند (مثلاً در توابع تو در تو)، توجه کنید اشارهگر داخلی ممکن است تغییر کند؛ در این موارد بهتر است از کپی آرایه یا
foreachاستفاده کنید. - برای خواندن صرف عناصر و عدم نیاز به کنترل اشارهگر،
foreachرا ترجیح دهید؛ سریعتر و خواناتر است. - اگر آرایه ممکن است شامل مقدار
nullیاfalseباشد و میخواهید انتهای آرایه را تشخیص دهید، ازkey() !== nullیا توابع شمارنده مانندcount()در کنار اشارهگر استفاده کنید.
نتیجهگیری (چکیده)
تابع current() ابزار مفیدی برای خواندن مقدار عنصر جاری آرایه در PHP است؛ مخصوصاً وقتی که نیاز به کنترل دستی روی اشارهگر آرایه دارید. با این حال برای اغلب عملیات پیمایش، foreach سادهتر و ایمنتر است. آشنایی با رفتار اشارهگر داخلی و مقادیر بازگشتی (بهخصوص مقدار false) به شما کمک میکند از current() به شکل صحیح و بدون خطا استفاده کنید.
آیا این مطلب برای شما مفید بود ؟




