Web Programmer
32 subscribers
7 photos
5 videos
5 links
پشتیبان چنل: @Bot_MoMi
Download Telegram
تا به حال عین فضایی ها کد زدین؟ 😂

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

⁉️ منظور مرتب‌سازی:
اگه با توابعی همچون usort یا uasort یا uksort کار کرده باشید میدونید که یه پارامتر قابل‌فراخونی(callable) دریافت میکنه. که شما بجای استفاده از if else های تو در تو و یا اضافه ازین عملگر استفاده میکنید.


💡 نحوه عملکرد:
سینتکس: a <=> $b$

🔰 این عملگر مقادیر زیر را بازمی‌گرداند:
0⃣ عدد -1: اگر a کوچکتر از b باشد.
2⃣ عدد 0: اگر a برابر b باشد.
3⃣ عدد 1: اگر a بزرگتر از b باشد.

👌 مثال استفاده از آن:
usort($array, function ($a, $b) {
return $a <=> $b;
});


پ.ن: حق میدم اگه باور نکنی PHP شخصاً برای اینجور توابع عملگر زده بوده 😂
😁2
کامند گذاشتن من ییشتر جنبه زیبایی داره تا راهنمایی 😂😂
🤣2
Web Programmer
??=
خب بریم به یه عملگر دیگه گیر بدیم.

💡 در زبان PHP، عملگر ??= به عنوان "Null Coalescing Assignment Operator" یا انتساب هم‌گذاری با نال شناخته میشه.

🧬 سینتکس:
$datas = [
"ok" => true,
"file_name" => null,
];

//=================
$datas["file_name"] ??= "default.php";
$datas["can_edit"] ??= false;

//=================
var_dump($datas["ok"]); // (bool) true
var_dump($datas["file_name"]); // (string) default.php
var_dump($datas["can_edit"]); // (bool) false


👌 کاربردش اینه اگه داده ای نال(یا اصن وجود نداشته باشه) باشه بجای ای اینکه از is_null یا isset استفاده کنی و شرطو شروط بزاری از یه عملگر ساده استفاده میکنی که خیلی خلاصه تره.
👍21
💡 همون‌طور که می‌دونید، دو کلیدواژه‌ی break و continue برای کنترل حلقه‌ها (مثل while، for و ...) و شروط (مثل switch) استفاده میشن.

اما تا حالا براتون سوال شده که چطور می‌تونید از داخلی‌ترین حلقه در یک حلقه‌ی تو در تو، بیرونی‌ترین حلقه رو break یا continue کنید؟ 🤔

مثلاً کد زیر رو ببینید:
$break_outermost_loop = false;
for ($i = 0; $i < 3; $i++) {
for ($j = 0; $j < 3; $j++) {
if ($j == 1) {
// break the outermost loop
$break_outermost_loop = true;
break;
}

// some code...
}

if ($break_outermost_loop) {
break;
}

// some code...
}

⭕️ شاید به ذهنتون برسه که می‌شه به این شکل حلقه‌ی بیرونی رو متوقف کرد. اما اگه تعداد حلقه‌های تو در تو بیشتر باشه، چی؟

زبان PHP برای این مسئله راه‌حلی داره!
با استفاده از یک عدد بعد از break یا continue، می‌تونید مشخص کنید که چند سطح از حلقه‌ها شکسته یا ادامه داده بشه:
for ($i = 0; $i < 3; $i++) { // level 2
for ($j = 0; $j < 3; $j++) { // level 1
if ($j == 1) {
break 2; // break level 1 and level 2 simultaneously
}

// some code...
}

// some code...
}

💡 نکته: کلیدواژه‌های break N و continue N از حلقه‌ی داخلی‌ترین سطح (1) شروع میشن و هر بار که یک سطح بیرونی‌تر میریم، مقدار N باید بزرگ‌تر بشه.

🔆 مثال:
• در break 1 فقط حلقه‌ی داخلی رو متوقف می‌کنه.
• در break 2 دو حلقه‌ی داخلی‌تر رو متوقف می‌کنه.
• در continue 2 پرش رو تا حلقه‌ی سطح 2 انجام میده و ...


این روش برای کنترل بهتر جریان اجرای برنامه در حلقه‌های تو در تو خیلی مفیده! 🚀
👏3👍1
📌 دستور match در PHP

از PHP 8 به بعد، ساختار match معرفی شد که جایگزینی بهینه‌تر و خواناتر برای switch است. 🚀


🔹 ویژگی‌های مهم match:
برگشتی است → مقدار را مستقیماً برمی‌گرداند، نیازی به break ندارد.
مقایسه سخت‌گیرانه (===) → برخلاف switch که از == استفاده می‌کند.
چندین مقدار برای یک خروجی → می‌توان چند مقدار را به یک نتیجه مرتبط کرد.
مقدار پیش‌فرض الزامی است → اگر مقدار مطابقتی پیدا نکند، خطا می‌دهد.

📌 مثال:
$number = 2;

$result = match ($number) {
1 => "One",
"2" => "(string) Two",
2 => "Two",
3 => "Three",
default => "Unknown",
};

echo $result; // خروجی: Two

با match کدهاتون سریع‌تر، خواناتر و بهینه‌تر خواهد شد! 🔥


پ.ن: خودم زیاد از match استفاده می‌کنم، ولی توی بیشتر پروژه‌ها ندیدم کسی سراغش بره. به نظر میاد هنوز جای خودش رو تو دنیای PHP باز نکرده! 😅
👍2
Web Programmer
چندین مقدار برای یک خروجی → می‌توان چند مقدار را به یک نتیجه مرتبط کرد.
🔹 شاید این ویژگی کمی مبهم به نظر بیاد.
در واقع، با استفاده از match شما می‌تونید چند مقدار مختلف رو که به یک نتیجه یکسان می‌رسند، در یک بخش بنویسید تا از تکرار جلوگیری بشه.

به جای اینکه برای هر مقدار مشابه یک خروجی تکراری بنویسید، می‌تونید همه اون‌ها رو در یک شرط قرار بدید.

📌 مثال:
$char = 'B';

$result = match ($char) {
'A', 'a', 'B', 'b' => "Letter A, a, B or b", // چندین مقدار برای یک خروجی
'C' => "Letter C", // فقط یک مقدار
default => "Unknown Letter",
};

echo $result; // خروجی: Letter A, a, B or b
🔥2
یه اپ تازه توسعه یافته و رایگانو بدون محدودیت این مشکلاتم داره بلخره، همه هجوم آوردن 😂
🗿2
This media is not supported in your browser
VIEW IN TELEGRAM
👆 ویدئو بالا رو ببینید، سرعت زبان های برنامه نویسی رو نشون میده.

😐 نکته ای که حائز اهمیته اینه که PHP و PHP JIT تقریبا 8 ثانیه اختلاف زمانی هست!!

#part_1 #opcache #jit
🤔1
قبل از توضیح JIT به OPcache که پیشنیازش هست میپردازیم


🚀 اکستنشن OPcache در PHP: افزایش سرعت اجرا
خب OPcache یک قابلیت کش (Cache) در PHP است که باعث می‌شود اسکریپت‌های PHP دیگر نیازی به تفسیر مجدد نداشته باشند و مستقیماً از حافظه اجرا شوند. این کار سرعت اجرای PHP را به‌شدت افزایش میده.


🔥اما OPcache چگونه کار می‌کند؟
درواقع PHP هنگام اجرا، ابتدا کد را به Bytecode تبدیل می‌کند.در حالت عادی، این مرحله هر بار که صفحه اجرا می‌شود تکرار می‌شود. اما OPcache باعث می‌شود که Bytecode در حافظه کش شده و بار بعدی مستقیماً از حافظه اجرا شود، بدون نیاز به پردازش مجدد.


🛠️ تنظیمات OPcache در PHP
برای فعال‌سازی OPcache، کافی است تنظیمات زیر را در فایل php.ini قرار دهید:

[opcache]
opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=128 opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
opcache.revalidate_freq=2


opcache.enable=1
اکستنشن OPcache را فعال می‌کند.


opcache.enable_cli=1
اکستنشن OPcache را در خط فرمان (CLI) هم فعال می‌کند.


opcache.memory_consumption=128
مقدار حافظه‌ای که OPcache می‌تواند استفاده کند (قابل افزایش به 256M یا بیشتر برای سرورهای قوی‌تر).

opcache.max_accelerated_files=10000
حداکثر تعداد فایل‌های PHP که می‌توانند در کش ذخیره شوند.


opcache.validate_timestamps=1
مشخص می‌کند که آیا تغییرات فایل‌ها بررسی شوند یا نه.


opcache.revalidate_freq=2
اگر validate_timestamps=1 باشد، PHP هر ۲ ثانیه فایل‌های تغییر‌یافته را بررسی می‌کند و کش را به‌روز می‌کند.


📌 مزایای OPcache
افزایش سرعت اجرا: اسکریپت‌های PHP بدون نیاز به تفسیر مجدد اجرا می‌شوند.
کاهش مصرف CPU: چون کدها کش شده‌اند، پردازش‌های اضافی حذف می‌شود.
بهینه‌سازی عملکرد PHP-FPM: در سرورهای پرمصرف، OPcache تأثیر زیادی روی سرعت دارد.
بارگذاری سریع‌تر صفحات وب: به‌خصوص برای سایت‌های وردپرسی و CMSها.

#part_2 #opcache #jit
🚀 اما PHP JIT چیست و چرا مهم است؟
خب JIT یا (Just-In-Time Compilation) یکی از مهم‌ترین بهینه‌سازی‌های اضافه‌شده در PHP 8 است که باعث افزایش سرعت اجرای کدها می‌شود. اما چطور؟ 🤔
درواقع JIT یا "کامپایل در لحظه" یک تکنیکه که باعث میشه برخی از بخش‌های کد PHP در زمان اجرا مستقیماً به کد ماشین تبدیل شن و دیگه نیازی به تفسیر خط‌به‌خط توسط مفسر Zend Engine نباشند. این یعنی کد سریع‌تر اجرا میشه!


🔹 بدون JIT: به‌صورت مفسری (Interpreted) اجرا شده و هر خط کد قبل از اجرا تفسیر میشه.
🔹 با JIT: قسمت‌هایی از کد که زیاد استفاده میشن، مستقیماً به کد ماشین تبدیل و ذخیره میشن و اجرای آن‌ها خیلی سریع‌تر خواهد شد.


🛠️ فعال‌سازی JIT در PHP:
برای فعال کردن JIT، باید تنظیمات مربوط به OPcache را در فایل php.ini تغییر دهید:

[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.jit_buffer_size=100M
opcache.jit=1255


opcache.enable=1
اکستنشن رو فعال می‌کنه.


opcache.enable_cli=1
اکستشن را در حالت CLI هم فعال میکنه.


opcache.jit_buffer_size=100M
مقدار RAM اختصاص‌یافته به JIT را مشخص می‌کند.


opcache.jit=1255
سطح بهینه‌سازی JIT (اعداد مختلف تأثیرات متفاوتی دارند).


🔥 مقایسه عملکرد با و بدون JIT:
برای تست عملکرد JIT، یک کد ساده بنچمارک را اجرا می‌کنیم

function test() {
$x = 0;
for ($i = 0; $i < 100000000; $i++) {
$x += sqrt($i);
}
return $x;
}

$start = microtime(true);
test();
$end = microtime(true);

echo "⏱️ زمان اجرا: " . ($end - $start) . " ثانیه\n";

🔹 بدون JIT: اجرای این کد ممکن است ۱۰ ثانیه طول بکشد.

🔹 با JIT: سرعت اجرا ۲ تا ۵ برابر سریع‌تر می‌شود! 🚀


#part_3 #opcache #jit
تفاوت OPcache و JIT در PHP:

🔹 هدف:
در OPcache باعث می‌شود که کدهای PHP پس از اولین اجرا، در حافظه کش شوند و نیازی به تفسیر مجدد نداشته باشند.
اما در JIT برخی از بخش‌های کد را مستقیماً به کد ماشین تبدیل می‌کند تا سریع‌تر اجرا شوند.


🔹 نحوه ذخیره‌سازی:
در OPcache کدهای PHP را به Bytecode تبدیل کرده و در حافظه ذخیره می‌کند.
اما در JIT کدهای PHP را مستقیماً به کد ماشین (Machine Code) کامپایل می‌کند.


🔹 تأثیر روی عملکرد:
در OPcache باعث کاهش تأخیر در اجرای اسکریپت‌های معمولی می‌شود و عملکرد کلی PHP را بهبود می‌بخشد.
اما در JIT مخصوص اجرای سریع محاسبات پیچیده و پردازش‌های سنگین طراحی شده است.


🔹 محیط‌های مناسب:
در OPcache برای وب‌سایت‌ها، CMSها، APIها و برنامه‌های معمولی PHP بسیار مفید است.
اما در JIT بیشتر برای پردازش‌های سنگین، یادگیری ماشین، پردازش ویدئو و محاسبات ریاضی پیچیده تأثیرگذار است.


🔹 نتیجه‌گیری:
در OPcache برای تمام پروژه‌های PHP توصیه می‌شود و باید فعال باشد.
اما در JIT تنها در شرایط خاص مفید است و برای وب‌سایت‌های معمولی تأثیر محسوسی ندارد.


🏎️ آیا JIT همیشه مفید است؟
در پردازش‌های ریاضی سنگین، یادگیری ماشین، گرافیک و پردازش ویدئو، JIT تأثیر زیادی در سرعت اجرا دارد.
اما برای وب‌سایت‌های معمولی و APIها، JIT تأثیر خیلی زیادی ندارد و OPcache به‌تنهایی کافی است.

#part_4 #opcache #jit
🚀 کانفیگ‌های بیشتر OPcache در PHP (php.ini)
;  فعال‌سازی OPcache  
opcache.enable=1

; فعال‌سازی OPcache برای CLI
opcache.enable_cli=1

; مقدار حافظه اختصاص‌یافته به OPcache (بر حسب مگابایت)
opcache.memory_consumption=128

; حداکثر تعداد اسکریپت‌های کش‌شده در OPcache
opcache.max_accelerated_files=10000

; بررسی تغییرات فایل‌ها برای به‌روزرسانی کش (۱ = فعال، ۰ = غیرفعال)
opcache.validate_timestamps=1

; فاصله زمانی برای بررسی تغییرات در فایل‌ها (بر حسب ثانیه)
opcache.revalidate_freq=2

; فعال‌سازی بهینه‌سازی در OPcache
opcache.optimization_level=0x7FFFBFFF

; غیرفعال‌سازی کش برای فایل‌های خاص (در صورت نیاز)
opcache.blacklist_filename=/path/to/blacklist.txt

; فعال‌سازی ذخیره در حافظه اشتراکی برای بهبود عملکرد
opcache.file_cache=/tmp

; مقدار زمان نگهداری فایل‌های کش‌شده در حافظه
opcache.file_cache_only=0

; غیرفعال‌سازی OPcache برای برخی توابع
opcache.restrict_api=

; نمایش اطلاعات کامل OPcache در `phpinfo()`
opcache.consistency_checks=0

; مقدار زمان نگهداری اطلاعات در حافظه پنهان
opcache.interned_strings_buffer=16


🔥 کانفیگ‌های بیشتر JIT در PHP (php.ini)
;  تنظیم مقدار حافظه اختصاص داده‌شده به JIT (بر حسب مگابایت)  
opcache.jit_buffer_size=100M

; تعیین سطح بهینه‌سازی JIT (اعداد مختلف تأثیر متفاوتی دارند)
opcache.jit=1255

; فعال‌سازی JIT برای پردازش‌های خاص
opcache.jit_hot_func=127
opcache.jit_hot_loop=64
opcache.jit_hot_return=8
opcache.jit_hot_side_exit=8

; تنظیمات بهینه‌سازی JIT برای پردازش‌های مختلف
opcache.jit_max_root_traces=1024
opcache.jit_max_side_traces=128
opcache.jit_max_loop_unrolls=8
opcache.jit_max_polymorphic_calls=4
opcache.jit_max_recursive_calls=2

; فعال‌سازی JIT فقط برای محیط CLI (اختیاری)
opcache.jit_debug=0

; استفاده از JIT در شرایط خاص
opcache.jit_fadeout=8
opcache.jit_blacklist_root_trace=16
opcache.jit_blacklist_side_trace=8

📌 نکته: مقدار opcache.jit=1255 یکی از بهترین تنظیمات برای بهینه‌سازی است، اما می‌توانید آن را با توجه به نیاز خود تغییر دهید.


🆔 Sources: JIT, OPCache, Configuration.

#part_5 #opcache #jit
🔥1
💀 بنچمارک جالب PHP با JIT فعال!

این کد PHP یه حلقه‌ی سنگینه که ۱۰ میلیون بار اجرا میشه:
for($str = "", $i = 0; $i < 10000000; $i++) {
$str .= ($i ** 15);
}
error_log($str);

⁉️ توضیح:
هر بار حلقه، متغیر $i رو به توان ۱۵ می‌رسونه و نتیجه رو به متغیر $str اضافه می‌کنه. و بعد از اجرا، یه فایل error log ایجاد میشه!

‼️ نتیجه با PHP JIT:
زمان اجرا: ۷.۷۶ ثانیه
حجم فایل لاگ: ۱۸۷ مگابایت
2👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🔍 بررسی‌هایی که روی هسته PHP داشتم بصورت اتفاقی چشمم به تابع json_validate افتاد که در PHP 8.3 اضافه شده! 🔥

فکر می‌کنم این ویژگی کمی دیر اضافه شد، چون قبلاً من خودم مجبور بودم این کار رو دستی انجام بدم. اما حالا با این تابع جدید، به راحتی می‌تونید بررسی کنید که آیا ورودی شما یک جیسون معتبر هست یا خیر!

ساختار تابع:
function json_validate(string $json, int $depth = 512, int $flags = 0): bool {}


پ. ن: حتی هوش مصنوعی از وجودش با خبر نشده(بدون اینکه بگید سرچ کنه).
Forwarded from ' 𝟸𝟺/𝟽 ' (Mobin)
این کوه‌هایی که داری با خودت حمل‌شون می‌کنی، قرار بود فقط ازشون بالا بری.
2