💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ حامد زالوند
تفاوت static با self
جامعه پی اچ پی ایجاد شده در ۳۰ مرداد ۱۴۰۳

سلام وقت بخیر 

شرمنده میشه تفاوت static و self در چیه 

مثلا کجا میتونیم از static استفاده کنیم  و تو کجا‌ها تو self ممنون میشم از راهنمایتون 

یکم تو اموزش درک نکردم .

1. static:

در PHP، وقتی شما متد یا پروپرتی (ویژگی) رو به صورت static تعریف می‌کنید، یعنی اون متد یا ویژگی به کلاس مربوطه تعلق داره، نه به یک شیء خاص از اون کلاس. به عبارت دیگه، شما می‌تونید از این متد یا ویژگی بدون نیاز به ایجاد یک شیء از کلاس استفاده کنید.

 

استفاده از static زمانی مفید هست که نیاز دارید متغیر یا متدی به طور مستقل از شی‌ها عمل کنه.

2. self:

self یه کلیدواژه دیگه در PHP هست که به شما اجازه میده به متغیرها و متدهای کلاس خودتون دسترسی پیدا کنید. self مستقیماً به خود کلاس اشاره می‌کنه، نه به شیء‌های اون کلاس. وقتی که نیاز دارید از متغیرها و متدهای کلاس خودتون استفاده کنید، مثلاً وقتی می‌خواهید یک متد دیگه از همون کلاس رو صدا بزنید، self به درد می‌خوره.

یه مثال با static:

class MyClass {
    public static $myVariable = 0;
    public static function myStaticMethod() {
        self::$myVariable++;
        echo "Value: " . self::$myVariable;
    }
}
MyClass::myStaticMethod(); // Value: 1
MyClass::myStaticMethod(); // Value: 2

یه مثال با self:

class MyClass {
    private static $myVariable = 0;
    public static function myMethod() {
        self::$myVariable++;
        echo "Value: " . self::$myVariable;
    }
    public static function callAnotherMethod() {
        self::myMethod();
    }
}
MyClass::callAnotherMethod();

نکته: باید بدونید که کلیدواژه self:: رو می‌تونید هم برای اعضای static و هم برای اعضای غیر static کلاس استفاده کنید. اما وقتی که بخواید از یه متد static به اعضای غیر static دسترسی پیدا کنید، خطا میده. این موضوع برعکسش یعنی از اعضای غیر static به اعضای static مشکلی نداره. (همچنین از non-static به non-static هم مشکلی نداره):

class A {
  public function nonStaticMethod() {
    echo get_class($this); 
  }
  public function otherNonStaticMethod() {
    self::nonStaticMethod();
  }
}
$a = new A();
$a->otherNonStaticMethod(); // A

منتها یک نکته رو برای self انجام دهید، این کیورد رو فقط برای متدها و پراپرتی‌های static استفاده کنید.

محسن موحد ۳۱ مرداد ۱۴۰۳، ۱۷:۳۳