TGViewer
| کانال توسعه‌دهندگان PHP | | کانال توسعه‌دهندگان PHP | @developixphp · 1.68K subscribers
Post #28 792
در‏ ‏PHP‏، parent, static, self‏, و $this کلیدواژه‌هایی هستند که برای دسترسی به ویژگی‌ها و متدهای مختلف کلاس‌ها استفاده می‌شوند. در اینجا توضیح و مثالی برای هر یک ارائه داده شده:

‏$this:
کلیدواژه $this به نمونه فعلی کلاس اشاره دارد. از این برای دسترسی به ویژگی‌ها و متدهای غیر استاتیک درون یک کلاس استفاده می‌شود.

مثال:
class Car {
public $color;

public function setColor($color) {
$this->color = $color;
}

public function getColor() {
return $this->color;
}
}

$car = new Car();
$car->setColor('blue');
echo $car->getColor(); // خروجی: blue

------
‏self:
کلیدواژه self به کلاسی اشاره دارد که در آن استفاده شده است. برای دسترسی به ویژگی‌ها و متدهای استاتیک کلاس مورد استفاده قرار می‌گیرد.

مثال:
class Car {
public static $number_of_cars = 0;

public function __construct() {
self::$number_of_cars++;
}

public static function getNumberOfCars() {
return self::$number_of_cars;
}
}

new Car();
new Car();
echo Car::getNumberOfCars(); // خروجی: 2

------

‏parent:
کلیدواژه parent برای دسترسی به ویژگی‌ها و متدهای کلاس والد استفاده می‌شود. معمولاً در زمینه‌هایی به کار می‌رود که وراثت مطرح است و می‌خواهیم به یک متد یا ویژگی در کلاس والد دسترسی داشته باشیم که در کلاس فرزند override شده است.

مثال:
class Vehicle {
protected function startEngine() {
echo "Engine started";
}
}

class Car extends Vehicle {
public function startEngine() {
parent::startEngine();
echo " and Car is ready!";
}
}

$car = new Car();
$car->startEngine(); // خروجی: Engine started and Car is ready!

------
‏static:
کلیدواژه static در جایی استفاده می‌شود که می‌خواهیم به ویژگی‌ها و متدهای استاتیک کلاس در حال اجرا دسترسی داشته باشیم، به ویژه در زمینه‌های وراثت که ممکن است نوع کلاس فرزند متفاوت باشد. static در زمان اجرا حل می‌شود و به کلاسی اشاره دارد که متد را فراخوانی کرده است.

مثال:
class Vehicle {
public static function who() {
echo "I am a Vehicle";
}

public static function test() {
static::who(); // دیر حل‌شدن: اینجا به "Vehicle" اشاره دارد
}
}

class Car extends Vehicle {
public static function who() {
echo "I am a Car";
}
}

Car::test(); // خروجی: I am a Car

در مثال بالا، با استفاده از static::who(), کلاس Car به جای Vehicle تشخیص داده شده است زیرا static به کلاسی اشاره دارد که متد در آن فراخوانی شده است. این مکانیزم به عنوان "Late Static Binding" شناخته می‌شود و به PHP اجازه می‌دهد که در زمان اجرا تصمیم بگیرد که کدام ورژن از متد باید استفاده شود، بر اساس کلاسی که متد را فراخوانی کرده، نه بر اساس کلاسی که متد در آن تعریف شده است.

این ویژگی بسیار مفید است زمانی که می‌خواهیم در یک کلاس پایه از متدهایی استفاده کنیم که ممکن است در کلاس‌های وراثت‌شده تغییر کنند و می‌خواهیم اطمینان حاصل کنیم که ورژن صحیح متد بر اساس کلاس فرزند استفاده می‌شود، حتی اگر از طریق کلاس والد فراخوانی شود.

برای درک بهتر static و self را در کنار هم میگذاریم:
class BaseClass {
public static function who() {
echo "I am a BaseClass";
}

public static function test() {
self::who(); // این همیشه به BaseClass اشاره دارد.
static::who(); // این می‌تواند به کلاس فرزند اشاره داشته باشد اگر override شده باشد.
}
}

class ChildClass extends BaseClass {
public static function who() {
echo "I am a ChildClass";
}
}

ChildClass::test();

خروجی این کد:
I am a BaseClass
I am a ChildClass

اولین خط با استفاده از self::who() همیشه به متد who() در BaseClass اشاره دارد، در حالی که دومین خط با استفاده از static::who() به متد who() در ChildClass اشاره دارد زیرا این متد در کلاس فرزند override شده است. این مثال نشان می‌دهد که چگونه self و static می‌توانند به طور متفاوتی عمل کنند و چرا static در موارد وراثت بسیار مفید است.

👤 AmirHossein

💎 Channel: @DevelopixPHP
  • 👍 9
  • ❤ 4
  • 🔥 2
More from @developixphp
  1. Sep 26, 2026این کد موقع اجرا چه خروجی‌ای می‌ده و مشکلش کجاست؟ 🔖 #PHP #پی_اچ_پی 👤 Developix 💎 Channe…
  2. Sep 25, 2026🔥 پکیج: قراردادهای ترجمه سیمفونی اگر کد PHP را برای چندزبانگی می‌نویسید، بهتر است منطق بر…
  3. Sep 16, 2026🚀 ‏LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
  4. Sep 11, 2026ارسال ایمیل تأیید ثبت‌نام، بازیابی رمز عبور یا نوتیفیکیشن سفارش، تقریباً توی هر پروژه‌ PHP…
  5. Sep 10, 2026برنامه نویسی سوکت در PHP بخش اول عبارت دیگر در ارتباط های غیر سوکت برای ارسال یک پالس از س…
  6. Aug 31, 2026🔥 پکیج: استاندارد PSR-11 برای Container استاندارد PSR-11 فقط یه interface مشترک برای Cont…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →