Web Programmer
32 subscribers
7 photos
5 videos
5 links
پشتیبان چنل: @Bot_MoMi
Download Telegram
💀 بنچمارک جالب 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
IoT is god 🤤



👌 یه برد ESP برنامه ریزی شده که توسط برنامه(عکس هست) داخل گوشی لامپ خونه خاموش یا روشن میشه و بصورت کاملا اینترنتی از راه دور.

🤌 پ.ن: هنوز میخواد بره قشنگ تو پریز کار گذاشته بشه، فعلا روکار وصل کردم برا تست و دیباگینگ 😁
1
🧐 یه وقتایی پیش میاد که می‌خوایم یه فانکشن جدید به پروژه شی‌گرا توی PHP اضافه کنیم. معمولاً میایم و فایلش رو include می‌کنیم، ولی تا حالا به این فکر کردید که میشه از use هم استفاده کرد؟

همونطور که می‌دونیم، 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
سلام سلام، عیدتون مبارک ستونا ❤️
4🥰1
🚀 چند خروجی از توابع در پایتون و PHP

اگه با 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

از نسخه 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) را به صورت رشته برمی‌گرداند.

مثلاً:
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:

معمولا (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.


💡نکته: برای کوپی کردنشون، داخل پرانتز کلیک کنید کوپی میشه، اول متنتون قرار بدین.