در مطلب های پیشین گام های آغازین نوشتن کلاس ها در پی اچ پی را آموزش دادیم و در ادامه آنها می خواهیم در مورد واژه کلیدی static برای ایجاد ویژگی ها و متدهای کلاس صحبت کنیم. برای آنکه بتوانیم به ویژگی ها ومتدهای کلاس دسترسی داشته باشیم، باید یک نمونه از آن کلاس را ایجاد کنیم. ولی اگر می خواهیم بدون ایجاد نمونه (شی) از کلاس، به ویژگی ها یا متدهای آن دسترسی داشته باشیم، باید آن ها را به شیوه (به صورت) static بنویسید. نکته مهم آن که اگر ویژگی (Property) به شیوه static نوشته شده باشد، پس نمی توان به وسیله یک نمونه از کلاس دسترسی داشت، بلکه برای دسترسی به آن (خواندن/نوشتن) باید از یک متد static کمک گرفته شود.

به این دلیل که متدهای static (یا متدهای ایستا) بوسیله یک نمونه (یا شی) کلاس فراخوانی نمی شوند، پس نمی توان متغیر this$ را درون متدهای static به کار ببریم. همچنین برای دسترسی به ویژگی یا متد ایستا، باید عملگر :: (به نام Scope Resolution Operator شناخته می شود) را همانند خط از کد شکل زیر به کار ببریم. در کد شکل زیر دو کلاس A و B را نوشته ایم که درون یکی متد ()satHello به شیوه نا اسیتا (Non Static) و در دیگری به شیوه ایستا نوشته شده است. چون متد ()sayHello در کلاس A نا ایستا است، پس خط ۱۰ یک خطا را نشان خواهد داد، چون بدون ایجاد نمونه به متد نا ایستا دسترسی داشته ایم ولی خط ۱۲ و ۱۳ برای کلاس A درست است. همچنین چون متد ()sayHello در کلاس B به شیوه ایستا نوشته شده است، پس خط ۲۳ درست خواهد بود.

همانند آنچه که در مورد متدها گفتیم، می توانیم واژه کلیدی static برای نوشتن ویژگی های (Property) ایستا را به کار ببریم. در اینجا نیز باید عملگر :: را برای دسترسی به ویژگی به کار ببریم، بدون آنکه لازم باشد تا نمونه از از کلاس را ایجاد کرده باشیم. نکته مهمی که باید به آن توجه کرد اینکه درون کلاس نمی توانیم بوسیله متغیر this$ به ویژگی ها و متدهای static دسترسی داشته باشیم و به جای متغیر this$ باید واژه کلیدی self را به کار ببریم.

در کد شکل بالا نخست یک ویژگی ایستا به نام message$ و سپس یک متد نا ایستا به نام ()printMessage نوشته شده است. کاربرد متد نمایش مقدار ویژگی است و چون ویژگی به شیوه ایستا نوشته شده است، پس باید واژه کلیدی self را به شیوه echo self::$message برای دسترسی به ویژگی (یا متد) ایستا به کار ببریم. توجه کنید که پس از self عملگر :: آمده و سپس نام ویژگی (به همراه کاراکتر $) نوشته شده است ولی اگر ویژگی ایستا نبود، باید this$ vh به شیوه this->message$ به کار می بردیم. در خط ۱۵ بدون ایجاد شی، ویژگی ایستا مقداردهی شده است ولی برای فراخوانی متد نا ایستا، باید یک نمونه ایجاد شود.

اگر ویژگی یا متد ایستا به صورت private یا protected بودند بازهم نمی توانستیم به آنها را از بیرون کلاس دسترسی داشته باشیم.

در کد شکل زیر در خط های ۶ و ۸ دو بار ویژگی همگانی (عمومی) message$ نوشته شده است که بار یکم آن به شیوه نا ایستا و بار دوم به شیوه ایستا نوشته شده است. هدف آن است که نشان دهیم نمی توانیم ویژگی نا ایستا را درون متد ایستا به کار ببریم ولی در برابر آن، می توانیم ویژگی ایستا را درون متد نا ایستا به کار بگیریم. بنابراین اگر خط ۶ را در نظر بگیرید، با اینکه از واژه کلیدی self کمک گرفتیم، چون ویژگی نا ایستا و متد ایستا است، پس خطای شکل دیگر نشان داده می شود. ولی اگر خط ۸ را بنویسیم، این بار با کمک واژه کلیدی self دیگر مشکلی پیش نمی آید.

در کد زیر نمونه دیگری از کاربرد static نشان داده شده است که این بار ویژگی ایستا فرمت تاریخ و زمان را نگه می دارد و سپس از این ویژگی و بوسیله واژه کلیدی self درون متد ایستا ()formatDate و درون تابع درونی ()date، مهر زمانی (Timestamp) یونیکس که شماره از است مبنی بر ثانیه های گذشته از یکم ژانویه سال ۱۹۷۰ را به فرمت قابل خوانده شدن تبدیل می کنیم. متد ()formatDate یک آرگومان ورودی که همان مهر زمانی است را دریافت و سپس فرمت شده آن را برگشت می دهد. در خط ۱۴ نخست یک متغیر به نام now$ ایجاد کردیم که برگشتی تابع ()time که همان شماره مهر زمانی است را در خود نگه می دارد، پس این متغیر به تابع ()formatDate فرستاده شده و در پایان مقدار برگشتی آن نشان داده می شود.