Codoloper

آموزش برنامه‌نویسی به فارسی

یاد بگیر، پیشرفت کن، بساز.

منبع آموزشی برنامه‌نویسی به زبان فارسی - مستندات، دوره‌ها و مطالب کاربردی برای همه سطوح.

داکیومنت ها:

CSSاچ تی ام البیشتر
1// برنامه‌نویسی به فارسی
2import { learn } from 'codoloper'
3
4const developer = learn({
5"lang": "فارسی"
6"level": "همه سطوح"
7free: true
8})
100+
صفحه مستندات
3+
زبان ها / فریمورک ها
رایگان
دسترسی کامل
چرا کدلپر؟

ارزش‌های ما

یادگیری برنامه‌نویسی نباید پیچیده باشد - ما مسیر را ساده می‌کنیم.

کیفیت بالا
مطالب آموزشی با بالاترین استانداردها تهیه می‌شوند.
همه سطوح
از مبتدی تا پیشرفته، آموزش برای همه.
نوآوری
روش‌های خلاقانه برای یادگیری بهتر و سریع‌تر.
جامعه پویا
یک جامعه حمایت‌کننده از برنامه‌نویسان فارسی‌زبان.
بروزرسانی روزانه
هر روز محتوای جدید اضافه می‌شود.
دسترسی آزاد
همه محتوا رایگان و در دسترس همه است.
محتوا

مستندات ترجمه‌شده

مستندات مهم‌ترین تکنولوژی‌ها، به فارسی روان.

نوشته‌ها

بلاگ

تازه‌ترین مطالب آموزشی و خبرهای مرتبط.

عکس نداره!

PHP 8 منتشر شده - چه چیزای جدیدی داره

<h1><span class="">PHP 8 چه چیز جدیدی دارد؟ سفری به مهم&zwnj;ترین تحولات این نسخه</span></h1> <p class="ds-markdown-paragraph"><span class="">PHP 8 در نوامبر 2020 منتشر شد و بدون شک یکی از بزرگ&zwnj;ترین به&zwnj;روزرسانی&zwnj;های تاریخ این زبان است. این نسخه مملو از ویژگی&zwnj;های جدید، بهبود کارایی و تغییرات ساختاری است که کدنویسی را لذت&zwnj;بخش&zwnj;تر، خوانایی کدها را بیشتر و اجرای برنامه&zwnj;ها را سریع&zwnj;تر می&zwnj;کند.</span></p> <p class="ds-markdown-paragraph"><span class="">در ادامه، مهم&zwnj;ترین قابلیت&zwnj;های PHP 8 را با مثال بررسی می&zwnj;کنیم.</span></p> <hr> <h2><span class="">۱. کامپایلر JIT (Just-In-Time)</span></h2> <p class="ds-markdown-paragraph"><span class="">شاید مهم&zwnj;ترین تغییر فنی در PHP 8، افزوده شدن کامپایلر&nbsp;</span><strong><span class="">JIT</span></strong><span class="">&nbsp;باشد. در نسخه&zwnj;های پیشین، کد PHP همیشه به بایت&zwnj;کد تبدیل و سپس توسط ماشین مجازی Zend اجرا می&zwnj;شد. اما در PHP 8، JIT می&zwnj;تواند بخش&zwnj;هایی از کد را مستقیماً به زبان ماشین ترجمه کند.</span></p> <p class="ds-markdown-paragraph"><strong><span class="">نتیجه؟</span></strong><br><span class="">در کارهای سنگین محاسباتی (مانند پردازش تصویر، شبیه&zwnj;سازی و عملیات ریاضی) تا ۳ برابر افزایش سرعت دیده می&zwnj;شود. البته برای برنامه&zwnj;های معمولی وب (مانند وردپرس یا لاراول)، بهبود سرعت چشمگیر نیست، اما پتانسیل بسیار بالایی برای کاربردهای خاص دارد.</span></p> <hr> <h2><span class="">۲. Attributes (نشانه&zwnj;گذاری&zwnj;های بومی)</span></h2> <p class="ds-markdown-paragraph"><span class="">تا پیش از PHP 8، برای افزودن متادیتا به کلاس&zwnj;ها و متدها مجبور بودید از DocBlock کامنت&zwnj;ها استفاده کنید (مثل&nbsp;</span><code>@route</code><span class="">&nbsp;در لاراول). اما PHP 8&nbsp;</span><strong><span class="">Attributes</span></strong><span class="">&nbsp;را معرفی کرد: یک روش بومی و ساختاریافته برای نشانه&zwnj;گذاری کد.</span></p> <p class="ds-markdown-paragraph"><strong><span class="">مثال:</span></strong></p> <div class="code-block-wrapper" style="position: relative;"> <pre class="language-php" data-copy-button-injected="true"><code>#[Route('/api/users', methods: ['GET'])] class UserController { #[Inject] private UserRepository $repository; }</code></pre> <button class="tinymce-copy-btn" style="position: absolute; top: 8px; right: 8px; font-size: 12px; z-index: 10; cursor: pointer;">کپی</button></div> <div class="md-code-block md-code-block-light"> <div class="code-block-wrapper" style="position: relative;"> <pre data-copy-button-injected="true">&nbsp;</pre> </div> </div> <p class="ds-markdown-paragraph"><span class="">این ویژگی باعث می&zwnj;شود ابزارهایی مانند Doctrine، Symfony و Laravel دیگر نیازی به پردازش کامنت&zwnj;ها نداشته باشند و کد تمیزتر و سریع&zwnj;تری داشته باشید.</span></p> <hr> <h2><span class="">۳. Named Arguments (آرگومان&zwnj;های نام&zwnj;دار)</span></h2> <p class="ds-markdown-paragraph"><span class="">با این قابلیت، هنگام فراخوانی تابع می&zwnj;توانید نام پارامترها را مشخص کنید. دیگر لازم نیست ترتیب پارامترها را حفظ کنید و همچنین می&zwnj;توانید از برخی پارامترهای اختیاری عبور کنید.</span></p> <p class="ds-markdown-paragraph"><strong><span class="">مثال:</span></strong></p> <div class="md-code-block md-code-block-light"> <div class="code-block-wrapper" style="position: relative;"> <pre data-copy-button-injected="true">&nbsp;</pre> </div> </div> <p class="ds-markdown-paragraph"><span class="">این قابلیت به خصوص برای توابع با پارامترهای زیاد یا پیش&zwnj;فرض بسیار مفید است.</span></p> <hr> <h2><span class="">۴. Constructor Property Promotion</span></h2> <p class="ds-markdown-paragraph"><span class="">قبل از PHP 8، برای تعریف و مقداردهی پراپرتی&zwnj;های کلاس در سازنده، کد زیادی می&zwnj;نوشتید. حالا می&zwnj;توانید تعریف پراپرتی و مقداردهی آن را یکجا در آرگومان&zwnj;های سازنده انجام دهید.</span></p> <p class="ds-markdown-paragraph"><strong><span class="">قبلاً:</span></strong></p> <div class="md-code-block md-code-block-light"> <div class="code-block-wrapper" style="position: relative;"> <pre data-copy-button-injected="true">&nbsp;</pre> </div> </div> <p class="ds-markdown-paragraph"><strong><span class="">حالا در PHP 8:</span></strong></p> <div class="md-code-block md-code-block-light"> <div class="md-code-block-banner-wrap"> <div class="md-code-block-banner md-code-block-banner-lite"> <div class="_121d384"> <div class="d2a24f03">&nbsp;</div> </div> </div> </div> <div class="code-block-wrapper" style="position: relative;"> <pre data-copy-button-injected="true">&nbsp;</pre> </div> </div> <p class="ds-markdown-paragraph"><span class="">کد بسیار کم&zwnj;حجم&zwnj;تر و خواناتر شده است.</span></p> <hr> <h2><span class="">۵. Match Expression (جایگزین بهتری برای Switch)</span></h2> <p class="ds-markdown-paragraph"><span class="">عبارت&nbsp;</span><code>match</code><span class="">&nbsp;شبیه&nbsp;</span><code>switch</code><span class="">&nbsp;است، اما با تفاوت&zwnj;های مهم:</span></p> <ul> <li> <p class="ds-markdown-paragraph"><span class="">نیاز به&nbsp;</span><code>break</code><span class="">&nbsp;ندارد.</span></p> </li> <li> <p class="ds-markdown-paragraph"><span class="">مقدار بازگشتی دارد (می&zwnj;توانید نتیجه را به متغیر نسبت دهید).</span></p> </li> <li> <p class="ds-markdown-paragraph"><span class="">مقایسه از نوع Strict (===) است.</span></p> </li> </ul> <p class="ds-markdown-paragraph"><strong><span class="">مثال:</span></strong></p> <div class="md-code-block md-code-block-light"> <div class="md-code-block-banner-wrap"> <div class="md-code-block-banner md-code-block-banner-lite"> <div class="_121d384">&nbsp;</div> </div> </div> <div class="code-block-wrapper" style="position: relative;"> <pre data-copy-button-injected="true">&nbsp;</pre> </div> </div> <p class="ds-markdown-paragraph"><span class="">این روش خواناتر و امن&zwnj;تر از&nbsp;</span><code>switch</code><span class="">&nbsp;سنتی است.</span></p> <hr> <h2><span class="">۶. Nullsafe Operator</span></h2> <p class="ds-markdown-paragraph"><span class="">فرض کنید می&zwnj;خواهید به یک پراپرتی از یک آبجکت برسید، اما ممکن است خود آبجکت یا واسط&zwnj;ها null باشند. در PHP 8 با عملگر&nbsp;</span><code>?-&gt;</code><span class="">&nbsp;می&zwnj;توانید زنجیره&zwnj;ای از دسترسی&zwnj;ها را بدون نگرانی از خطای Null انجام دهید.</span></p> <p class="ds-markdown-paragraph"><strong><span class="">مثال:</span></strong></p> <div class="md-code-block md-code-block-light"> <div class="code-block-wrapper" style="position: relative;"> <pre data-copy-button-injected="true">&nbsp;</pre> </div> </div> <p class="ds-markdown-paragraph"><span class="">اگر هرکدام از این مراحل null باشد، کل عبارت null برمی&zwnj;گرداند و خطایی رخ نمی&zwnj;دهد.</span></p> <hr> <h2><span class="">۷. انواع ترکیبی (Union Types)</span></h2> <p class="ds-markdown-paragraph"><span class="">حالا می&zwnj;توانید برای یک پارامتر یا خروجی بیش از یک نوع داده را مشخص کنید.</span></p> <p class="ds-markdown-paragraph"><strong><span class="">مثال:</span></strong></p> <div class="md-code-block md-code-block-light"> <div class="md-code-block-banner-wrap"> <div class="md-code-block-banner md-code-block-banner-lite"> <div class="_121d384">&nbsp;</div> </div> </div> </div> <p class="ds-markdown-paragraph"><span class="">این قابلیت امنیت نوع&zwnj;ها را به طرز چشمگیری افزایش می&zwnj;دهد.</span></p> <hr> <h2><span class="">۸. بهبود در توابع داخلی</span></h2> <ul> <li> <p class="ds-markdown-paragraph"><code>str_contains()</code><span class="">: بررسی وجود زیررشته در رشته</span></p> </li> <li> <p class="ds-markdown-paragraph"><code>str_starts_with()</code><span class="">&nbsp;و&nbsp;</span><code>str_ends_with()</code></p> </li> <li> <p class="ds-markdown-paragraph"><code>get_debug_type()</code><span class="">: نمایش نوع واقعی متغیر (بر خلاف&nbsp;</span><code>gettype()</code><span class="">&nbsp;که گاهی گمراه&zwnj;کننده است)</span></p> </li> </ul> <p class="ds-markdown-paragraph"><strong><span class="">مثال:</span></strong></p> <div class="md-code-block md-code-block-light"> <div class="md-code-block-banner-wrap"> <div class="md-code-block-banner md-code-block-banner-lite"> <div class="_121d384">&nbsp;</div> </div> </div> </div> <p class="ds-markdown-paragraph"><span class="">دیگر نیازی به استفاده از </span><code>strpos() !== false</code><span class="">&nbsp;نیست.</span></p> <hr> <h2><span class="">۹. Weak Maps</span></h2> <p class="ds-markdown-paragraph"><span class="">نقشه&zwnj;های ضعیف (Weak Maps) به شما اجازه می&zwnj;دهند اشیاء را به عنوان کلید در یک آرایه ذخیره کنید، بدون اینکه مانع از پاک شدن آن شیء توسط گاربیج کالکتور شوند. این ویژگی برای پیاده&zwnj;سازی کش و سیستم&zwnj;های ذخیره&zwnj;سازی موقت عالی است.</span></p> <hr> <h2><span class="">۱۰. TypeError بهبودیافته</span></h2> <p class="ds-markdown-paragraph"><span class="">حالا خطاهای نوع در توابع دقیق&zwnj;تر و کمک&zwnj;کننده&zwnj;تر هستند. پیغام خطا نشان می&zwnj;دهد دقیقاً چه نوعی انتظار می&zwnj;رفته و چه نوعی دریافت شده است.</span></p> <hr> <h2><span class="">جمع&zwnj;بندی: آیا به PHP 8 ارتقا دهید؟</span></h2> <p class="ds-markdown-paragraph"><span class="">پاسخ&nbsp;</span><strong><span class="">بله</span></strong><span class="">&nbsp;است، اما با رعایت نکات:</span></p> <ul> <li> <p class="ds-markdown-paragraph"><span class="">برنامه&zwnj;های قدیمی ممکن است با تغییرات ناسازگار (مانند حذف برخی توابع) مواجه شوند.</span></p> </li> <li> <p class="ds-markdown-paragraph"><span class="">اکثر فریمورک&zwnj;های محبوب (Laravel، Symfony، WordPress) از PHP 8 پشتیبانی کامل دارند.</span></p> </li> <li> <p class="ds-markdown-paragraph"><span class="">افزایش سرعت، کدنویسی خواناتر و کاهش خطاهای رایج ارزش ارتقا را دارد.</span></p> </li> </ul> <p class="ds-markdown-paragraph"><span class="">PHP 8 سنگی محکم در مسیر تکامل این زبان است. اگر هنوز از PHP 7 استفاده می&zwnj;کنید، زمان مناسبی است برای مهاجرت به PHP 8 یا حتی PHP 8.1 و 8.2 که بهبودهای بیشتری نیز ارائه داده&zwnj;اند.</span></p>