TGViewer
| کانال توسعه‌دهندگان PHP | | کانال توسعه‌دهندگان PHP | @developixphp · 1.68K subscribers
Post #40 904
کلمه کلیدی yield در PHP برای ساخت جنراتورها استفاده می‌شود. جنراتورها امکان ایجاد سری‌هایی از داده‌ها را فراهم می‌کنند بدون اینکه نیاز به بارگذاری همه آن‌ها در حافظه باشد. این ویژگی خصوصاً برای کار با داده‌های حجیم یا عملیات‌هایی که به تولید تعداد زیادی داده نیاز دارند مفید است.

‏yield در واقع مقداری را به Caller (تابعی که جنراتور را فراخوانی می‌کند) بازمی‌گرداند، اما در عین حال حالت فعلی جنراتور را نیز ذخیره می‌کند تا بتوان بعداً از همان نقطه ادامه داد. این تفاوت اصلی بین yield و return است؛ return کارکرد تابع را به طور کامل پایان می‌دهد، در حالی که yield این امکان را می‌دهد که تابع بعداً از همان نقطه توقف اجرا شود.

مثال :
فرض کنید که ما یک فایل بزرگ لاگ داریم که می‌خواهیم هر خط آن را بخوانیم و بررسی کنیم. به جای خواندن کامل فایل در حافظه، می‌توانیم از جنراتور برای خواندن خط به خط استفاده کنیم تا مصرف حافظه را کاهش دهیم.

function readLargeFile($filename) {
$handle = fopen($filename, "r");

while (!feof($handle)) {
yield fgets($handle);
}

fclose($handle);
}

foreach (readLargeFile("large_log_file.txt") as $line) {
echo $line . "<br>";
}


در این مثال، تابع readLargeFile به عنوان یک جنراتور عمل می‌کند. این تابع ابتدا فایل مورد نظر را برای خواندن باز می‌کند. درون حلقه while، از fgets برای خواندن هر خط از فایل استفاده می‌کنیم. تابع fgets خط بعدی را از فایل می‌خواند، و با استفاده از yield، این خط را به کد خارج از تابع برمی‌گرداند.

با استفاده از حلقه foreach، ما می‌توانیم هر خطی که جنراتور readLargeFile باز می‌گرداند را استفاده کنیم. این اجازه می‌دهد که هر خط را بلافاصله پردازش کنیم بدون اینکه نیاز باشد کل فایل در حافظه بارگذاری شود. این روش بسیار مؤثری برای کار با فایل‌های بزرگ است، زیرا فقط بخشی از فایل که در حال پردازش است در حافظه نگه داشته می‌شود، و بنابراین مصرف حافظه به شدت کاهش می‌یابد.

این رویکرد خصوصاً در مواقعی مفید است که با داده‌هایی کار می‌کنیم که بسیار بزرگ‌تر از حافظه موجود هستند یا وقتی که می‌خواهیم اطمینان حاصل کنیم که برنامه‌ی ما بهینه و کارآمد باقی می‌ماند حتی در مواجهه با حجم زیادی از داده‌ها.

👤 AmirHossein

💎 Channel: @DevelopixPHP
  • 👍 6
  • ❤ 4
  • 🔥 2
More from @developixphp
  1. Sep 26, 2026این کد موقع اجرا چه خروجی‌ای می‌ده و مشکلش کجاست؟ 🔖 #PHP #پی_اچ_پی 👤 Developix 💎 Channe…
  2. Sep 25, 2026🔥 پکیج: قراردادهای ترجمه سیمفونی اگر کد PHP را برای چندزبانگی می‌نویسید، بهتر است منطق بر…
  3. Sep 16, 2026🚀 &rlm;LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
  4. Sep 11, 2026ارسال ایمیل تأیید ثبت‌نام، بازیابی رمز عبور یا نوتیفیکیشن سفارش، تقریباً توی هر پروژه‌ PHP…
  5. Sep 10, 2026برنامه نویسی سوکت در PHP بخش اول عبارت دیگر در ارتباط های غیر سوکت برای ارسال یک پالس از س…
  6. Aug 31, 2026🔥 پکیج: استاندارد PSR-11 برای Container استاندارد PSR-11 فقط یه interface مشترک برای Cont…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →