🧩 قابلیت ::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.
〰〰〰〰
💡نکته: برای کوپی کردنشون، داخل پرانتز کلیک کنید کوپی میشه، اول متنتون قرار بدین.