💀 بنچمارک جالب PHP با JIT فعال!
این کد PHP یه حلقهی سنگینه که ۱۰ میلیون بار اجرا میشه:
⁉️ توضیح:
➖ هر بار حلقه، متغیر
‼️ نتیجه با PHP JIT:
⏳ زمان اجرا: ۷.۷۶ ثانیه
☠ حجم فایل لاگ: ۱۸۷ مگابایت
این کد PHP یه حلقهی سنگینه که ۱۰ میلیون بار اجرا میشه:
for($str = "", $i = 0; $i < 10000000; $i++) {
$str .= ($i ** 15);
}
error_log($str);⁉️ توضیح:
➖ هر بار حلقه، متغیر
$i رو به توان ۱۵ میرسونه و نتیجه رو به متغیر $str اضافه میکنه. و بعد از اجرا، یه فایل error log ایجاد میشه! ‼️ نتیجه با PHP JIT:
⏳ زمان اجرا: ۷.۷۶ ثانیه
☠ حجم فایل لاگ: ۱۸۷ مگابایت
❤2👍1
🔍 بررسیهایی که روی هسته PHP داشتم بصورت اتفاقی چشمم به تابع json_validate افتاد که در PHP 8.3 اضافه شده! 🔥
فکر میکنم این ویژگی کمی دیر اضافه شد، چون قبلاً من خودم مجبور بودم این کار رو دستی انجام بدم. اما حالا با این تابع جدید، به راحتی میتونید بررسی کنید که آیا ورودی شما یک جیسون معتبر هست یا خیر! ✅
ساختار تابع:
پ. ن: حتی هوش مصنوعی از وجودش با خبر نشده(بدون اینکه بگید سرچ کنه).
فکر میکنم این ویژگی کمی دیر اضافه شد، چون قبلاً من خودم مجبور بودم این کار رو دستی انجام بدم. اما حالا با این تابع جدید، به راحتی میتونید بررسی کنید که آیا ورودی شما یک جیسون معتبر هست یا خیر! ✅
ساختار تابع:
function json_validate(string $json, int $depth = 512, int $flags = 0): bool {}پ. ن: حتی هوش مصنوعی از وجودش با خبر نشده(بدون اینکه بگید سرچ کنه).
This media is not supported in your browser
VIEW IN TELEGRAM
🎬 Sam showing little bit power 💀
کانال مهرداد لینوکس
معمولا اونی که با اسمبلی نوشته میشه کند تره به دو چیز وابسته هست سطح سواد و تسلط برنامه نویس به زبان ماشین و نوع الگوریتم استفاده شده این تا دلیل ، نشون میده چرا سرعت اسمبلی کمتر خواهد بود کامپایلر ها و اسمبلر ها مثل GCC توانایی شگفت اوری در بهینه سازی…
قشنگترین چیزی که میتونست منو متقاعد کنه سرعت اسمبلی کندتر میتونه باشه👌
👍2
Forwarded from ' 𝟸𝟺/𝟽 ' (Mobin)
این کوههایی که داری با خودت حملشون میکنی، قرار بود فقط ازشون بالا بری.
❤2
Razavi Tuts
امروز فهمیدم جاوااسکریپت به این ساختار عددنویسی گیر نمیده و براش نرماله: const billion = 1_000_000_000 این ویژگیش باعث میشه نوشتن عددهای بزرگ داخل کد راحتتر و کم خطاتر بشه البته فقط js نیست و فک کنم اکثر زبانای دیگه هم پشتیبانیش میکنن
کاملا جالب و کاربردی 👌
از PHP 7.4 به بعد این سینتکس قابل استفادهس
از PHP 7.4 به بعد این سینتکس قابل استفادهس
IoT is god 🤤
〰〰〰〰
👌 یه برد ESP برنامه ریزی شده که توسط برنامه(عکس هست) داخل گوشی لامپ خونه خاموش یا روشن میشه و بصورت کاملا اینترنتی از راه دور.
🤌 پ.ن: هنوز میخواد بره قشنگ تو پریز کار گذاشته بشه، فعلا روکار وصل کردم برا تست و دیباگینگ 😁
〰〰〰〰
👌 یه برد ESP برنامه ریزی شده که توسط برنامه(عکس هست) داخل گوشی لامپ خونه خاموش یا روشن میشه و بصورت کاملا اینترنتی از راه دور.
🤌 پ.ن: هنوز میخواد بره قشنگ تو پریز کار گذاشته بشه، فعلا روکار وصل کردم برا تست و دیباگینگ 😁
❤1
🧐 یه وقتایی پیش میاد که میخوایم یه فانکشن جدید به پروژه شیگرا توی PHP اضافه کنیم. معمولاً میایم و فایلش رو include میکنیم، ولی تا حالا به این فکر کردید که میشه از use هم استفاده کرد؟
✅ همونطور که میدونیم، use توی PHP معمولاً برای آبجکتها و namespaceها استفاده میشه، ولی جالبه بدونید که میتونید از ترکیب use function هم استفاده کنیم تا یه فانکشن رو به پروژهات اضافه کنیم.
🔆 مثال:
🔰 اگه از کامپوزر استفاده میکنی، تنظیمات autoload رو به این شکل ست کن:
اینجوری کد تمیزتر و حرفهایتر میشه! 🚀
✅ همونطور که میدونیم، use توی PHP معمولاً برای آبجکتها و namespaceها استفاده میشه، ولی جالبه بدونید که میتونید از ترکیب use function هم استفاده کنیم تا یه فانکشن رو به پروژهات اضافه کنیم.
🔆 مثال:
function file:
namespace You;
if( ! function_exists('greetings') ) {
function greetings(string $firstname): string {
return "Howdy $firstname!";
}
}
using in project oop:
require_once __DIR__ . '/vendor/autoload.php'; // if you use composer
use function You\greetings;
echo greetings('Mark'); // "Howdy Mark!"
🔰 اگه از کامپوزر استفاده میکنی، تنظیمات autoload رو به این شکل ست کن:
"autoload": {
"files": [
"src/greetings.php"
]
}اینجوری کد تمیزتر و حرفهایتر میشه! 🚀
🔥2
🚀 چند خروجی از توابع در پایتون و PHP
اگه با Python کار کرده باشید، میدونید که میتونیم با تاپلها مقادیر برگشتی یک تابع رو در چندین متغیر بریزیم.
مثال در پایتون:
〰〰〰〰〰〰
❓ اما داخل PHP هم ممکنه؟
✅ جواب: بله! در PHP میتونیم از آرایههای فهرستی برای همین کار استفاده کنیم:
💡 از PHP 7.1+ میتونیم از نسخه کوتاه شده هم استفاده کنیم:
〰〰〰〰
✨ مزیتها و قابلیتهای بیشتر:
1. باز کردن چند سطحی:
2. کار با آرایههای انجمنی:
3. نادیده گرفتن عناصر اضافی:
4. خواناتر و مدرنتر نسبت به list
〰〰〰〰
نسخه کوتاه [ ] شبیه tuple unpacking پایتون است و خیلی انعطافپذیرتر است.
💡 با این روش میتونید چند خروجی از یک تابع داشته باشید و کدتون هم خواناتر و ساختارمندتر بشه.
اگه با Python کار کرده باشید، میدونید که میتونیم با تاپلها مقادیر برگشتی یک تابع رو در چندین متغیر بریزیم.
یعنی به جای داشتن یک خروجی، میتونیم چند خروجی داشته باشیم!
مثال در پایتون:
def sum_and_product(a, b) -> tuple:
suma = a + b
prod = a * b
return (suma, prod)
sum, product = sum_and_product(3, 5)
print(sum) # 🟢 8
print(product) # 🟢 15
〰〰〰〰〰〰
❓ اما داخل PHP هم ممکنه؟
✅ جواب: بله! در PHP میتونیم از آرایههای فهرستی برای همین کار استفاده کنیم:
function sum_and_product(int $a, int $b): array {
$sum = $a + $b;
$prod = $a * $b;
return [$sum, $prod];
}
list($sum, $product) = sum_and_product(3, 5);
echo $sum . PHP_EOL; // 🟢 8
echo $product . PHP_EOL; // 🟢 15💡 از PHP 7.1+ میتونیم از نسخه کوتاه شده هم استفاده کنیم:
[$sum, $product] = sum_and_product(3, 5);
〰〰〰〰
✨ مزیتها و قابلیتهای بیشتر:
1. باز کردن چند سطحی:
$data = [1, [2, 3]];
[$a, [$b, $c]] = $data;
2. کار با آرایههای انجمنی:
$data = ['sum' => 8, 'product' => 15];
['sum' => $s, 'product' => $p] = $data;
3. نادیده گرفتن عناصر اضافی:
$data = [1, 2, 3, 4];
[, $b, , $d] = $data;
4. خواناتر و مدرنتر نسبت به list
〰〰〰〰
نسخه کوتاه [ ] شبیه tuple unpacking پایتون است و خیلی انعطافپذیرتر است.
💡 با این روش میتونید چند خروجی از یک تابع داشته باشید و کدتون هم خواناتر و ساختارمندتر بشه.
🔥1
🐘 اپراتور (?->) در PHP
📌 این یعنی چی؟
همونطور که میدونیم اگه متغییر object$ برابر با NULL باشه، خروجیمون خطای Fatal میده. اما با اپراتور (?->) شما رسما میگی اگه NULL بود، خروجی رو NULL برگردون.
🔗 زنجیرهسازی
میتونی چند پراپرتی پشت سر هم بخونی:
اگر متغییر object$ برابر با NULL باشه, خروجی NULL خواهد بود.
اما اگر object$ واقعا آبجکت بود, ولی پراپرتی test برابر با NULL بود، خروجیمون خطای Fatal میده(چون فقط جلوی object$ از ?-> استفاده کردیم).
✅ راهحل
برای هر جایی که احتمال NULL بودن هست باید دوباره ?-> بذاری:
💡 مثال:
✨ خلاصه:
اپراتور ?-> یعنی اگر NULL بود، ادامه نده و NULL بده.
و برای زنجیرههای طولانی، هرجا احتمال NULL هست باید دوباره ?-> استفاده کنیم.
از نسخه PHP 8 به بعد عملگر جدیدی به اسم NullSafe Operator معرفی شد:
$object?->test
📌 این یعنی چی؟
همونطور که میدونیم اگه متغییر object$ برابر با NULL باشه، خروجیمون خطای Fatal میده. اما با اپراتور (?->) شما رسما میگی اگه NULL بود، خروجی رو NULL برگردون.
🔗 زنجیرهسازی
میتونی چند پراپرتی پشت سر هم بخونی:
$object?->test->test_again
اگر متغییر object$ برابر با NULL باشه, خروجی NULL خواهد بود.
اما اگر object$ واقعا آبجکت بود, ولی پراپرتی test برابر با NULL بود، خروجیمون خطای Fatal میده(چون فقط جلوی object$ از ?-> استفاده کردیم).
✅ راهحل
برای هر جایی که احتمال NULL بودن هست باید دوباره ?-> بذاری:
$object?->test?->test_again
💡 مثال:
class Test {
public $test;
}
class Sub {
public $test_again = "salam";
}
$a = new Test();
$a->test = new Sub();
$b = null;
echo $a?->test?->test; // salam
echo $b?->test?->test_again; // null✨ خلاصه:
اپراتور ?-> یعنی اگر NULL بود، ادامه نده و NULL بده.
و برای زنجیرههای طولانی، هرجا احتمال NULL هست باید دوباره ?-> استفاده کنیم.
🧩 قابلیت ::class در PHP
از نسخهی PHP 5.5 به بعد، قابلیتی به نام ::class اضافه شد که مسیر کامل یک کلاس (همراه با namespace) را به صورت رشته برمیگرداند.
مثلاً:
🔹 self::class
نام همان کلاسی را برمیگرداند که کد درون آن نوشته شده است.
یعنی حتی اگر کلاس فرزند آن را صدا بزند، باز هم اسم کلاس والد برمیگردد.
🔹 static::class
برعکس self، در زمان اجرا بررسی میکند شیء واقعاً از چه کلاسی ساخته شده است.
پس اگر کلاس فرزند از کلاس والد ارثبری کرده باشد، static::class نام کلاس فرزند را میدهد.
🔹
یک ثابت جادویی (magic constant) است که همیشه نام کلاسی که کد در آن نوشته شده را برمیگرداند.
تقریباً معادل self::class است و تفاوت جزئی در بافت استفاده دارد.
〰〰〰〰
📘 خلاصه:
از نسخهی PHP 5.5 به بعد، قابلیتی به نام ::class اضافه شد که مسیر کامل یک کلاس (همراه با namespace) را به صورت رشته برمیگرداند.
مثلاً:
namespace App\Core;
class ExitProcess {}
echo ExitProcess::class;
//result: App\Core\ExitProcess
این یعنی ::class فقط نام کامل کلاس را بهصورت string برمیگرداند و کاری اجرا نمیکند.〰〰〰〰
🔹 self::class
نام همان کلاسی را برمیگرداند که کد درون آن نوشته شده است.
یعنی حتی اگر کلاس فرزند آن را صدا بزند، باز هم اسم کلاس والد برمیگردد.
🔹 static::class
برعکس self، در زمان اجرا بررسی میکند شیء واقعاً از چه کلاسی ساخته شده است.
پس اگر کلاس فرزند از کلاس والد ارثبری کرده باشد، static::class نام کلاس فرزند را میدهد.
🔹
__CLASS__یک ثابت جادویی (magic constant) است که همیشه نام کلاسی که کد در آن نوشته شده را برمیگرداند.
تقریباً معادل self::class است و تفاوت جزئی در بافت استفاده دارد.
〰〰〰〰
📘 خلاصه:
ExitProcess::class مسیر کامل کلاس بهصورت رشته برمیگرداند.
self::class نام همان کلاس فعلی را میدهند.
static::class نام کلاس واقعی در زمان اجرا را برمیگرداند (حتی اگر از ارثبری استفاده شود).
‼️ ممکنه همچنین ساختاری در توابع دیدید، یا به اشتباه ازش استفاده کنید:
function fnc1() {
echo "fnc1";
return false;
}
function fnc2() {
echo "&&fnc2";
return true;
}
return fnc1() && fnc2();💡 بررسی عمیق تابع intval() و (int) در PHP:
〰〰〰〰
❌ خیلیها فکر میکنن intval() یا (int) کل رشته رو بررسی میکنه و اگر جز عدد کاراکتر دیگهای بود، صفر میده.
✅ اما intval() یا (int) فقط از ابتدای رشته شروع میکنه به خواندن عدد.
- اگر ابتدای رشته عدد باشه، تا جایی که عدد هست ادامه میده و بعد متوقف میشه.
- اگر ابتدای رشته عدد نباشه، نتیجه 0 خواهد بود.
〰〰〰〰
➰➰➰➰
نکته: تا نسخه 8.4، این رفتار بدون تغییر بوده است و ممکن است در نسخههای بعدی متفاوت عمل کند.
〰〰〰〰
#برسی_عمیق_توابع
معمولا (int) یا intval() وقتی میخوایم یک مقدار رو به نوع عدد صحیح تبدیل کنیم استفاده میشه.
〰〰〰〰
مثال ساده:
// intval():
var_dump(intval("1234")); // نتیجه: int(1234)
var_dump(intval("42abc")); // نتیجه: int(42)
var_dump(intval("abc42")); // نتیجه: int(0)
//یا (int):
var_dump((int)"1234ee41"); // int(1234)
var_dump((int)"jj1234ee41"); // int(0)
var_dump((int)"42abc"); // int(42)
❌ خیلیها فکر میکنن intval() یا (int) کل رشته رو بررسی میکنه و اگر جز عدد کاراکتر دیگهای بود، صفر میده.
✅ اما intval() یا (int) فقط از ابتدای رشته شروع میکنه به خواندن عدد.
- اگر ابتدای رشته عدد باشه، تا جایی که عدد هست ادامه میده و بعد متوقف میشه.
- اگر ابتدای رشته عدد نباشه، نتیجه 0 خواهد بود.
〰〰〰〰
مثال توضیحی:
var_dump(intval("1234ee41")); // ابتدای رشته عدد هست → int(1234)
var_dump(intval("jj1234ee41")); // ابتدای رشته عدد نیست → int(0)➰➰➰➰
نکته: تا نسخه 8.4، این رفتار بدون تغییر بوده است و ممکن است در نسخههای بعدی متفاوت عمل کند.
〰〰〰〰
#برسی_عمیق_توابع
شاید واستون پیش امده، بخواین متنتون حتما راستچین یا چپچین باشه، اینجا دوتا کارکتر کاربردی بهتون معرفی میکنم که به راحتی این کارو انجام بده.
〰〰〰〰〰
• راست چین کردن:
[
|> مثال:
||> متن عادی:
||> متن راستچین شده:
➿➿➿➿➿
• چپ چین کردن:
[
|> مثال:
||> متن عادی:
||> متن چپچین شده:
〰〰〰〰
💡نکته: برای کوپی کردنشون، داخل پرانتز کلیک کنید کوپی میشه، اول متنتون قرار بدین.
〰〰〰〰〰
• راست چین کردن:
[
]|> مثال:
||> متن عادی:
PHP یک زبان برنامه نویسی است.
||> متن راستچین شده:
PHP یک زبان برنامه نویسی است.
➿➿➿➿➿
• چپ چین کردن:
[
]|> مثال:
||> متن عادی:
پیاچ پی is a programming language.
||> متن چپچین شده:
پیاچپی is a programming language.
〰〰〰〰
💡نکته: برای کوپی کردنشون، داخل پرانتز کلیک کنید کوپی میشه، اول متنتون قرار بدین.