Setare Behzadi
Setare Behzadi
خواندن ۱ دقیقه·۵ سال پیش

کاربرد کلمه کلیدی Static در شی گرایی

در این مقاله قصد دارم تاثیر static بر اعضای یک کلاس را مورد توجه قرار بدم .

با مثال زیر که به زبان php هست شروع میکنیم.

<?php /* Use static function as a counter */ class math{ public static $pi=3.14; public $title='Math Class'; public static function sum($a,$b) { return $a+$b; }


اولین سوالی که مطرح میشود، فرق بین property title , property pi چیست؟

وقتی از کلیدواژه static برای یک propertyاستفاده میشود یعنی اونو واسه کل کلاس درنظر گرفتیم نه objectهایی که از اون کلاس ساخته شده اند. بدین سبب میتوان به متدها و یا propertyهایی که بصورت static تعریف شده اند، بدون ساخت شی ای ازون کلاس بهشون دسترسی داشت. بطور مثال میتوانیم بنویسیم:

echo math::$pi

اما اگر تایتل رو اینطوری فراخوانی کنیم به ارور میخوریم.

echo math::$title //error

جمع بندی

بنابراین به اون متدها و ویژگی هایی که با استفاده از کلمه کلیدی static تعریف میشوند میگویند اعضای کلاس و بدون نیاز به instantiation میتوان از آنها استفاده کرد.


پی نوشت

متدی که static هست به propertyهای غیر استاتیک دسترسی ندارد. اما متدی که استاتیک نیست هم به ویژگی های غیر استاتیک و هم استاتیک دسترسی دارد. و البته باید توجه داشت که مقدار property استاتیک برای همه ی اشیا مقدار یکسانی خواهد داشت.

مثال

<?php /* Use static function as a counter */ class solution { static $count; public static function getCount() { return self::$count++; } } solution::$count = 1; for($i = 0; $i < 5; ++$i) { echo 'The next value is: '. solution::getCount() . &quot\n&quot } ?>

خروجی بالا بصورت ذیل میباشد:

The next value is: 1 The next value is: 2 The next value is: 3 The next value is: 4 The next value is: 5

چه موقع از static استفاده میکنیم؟

از کلمه کلیدی زمانی استفاده میکنیم که یک ویژگی و یا متد برای همه ی object های یک کلاس یکسان است. بنابراین هر منطقی که بتواند در چندین نمونه(obj) استفاده شود باید بصورت استاتیک در بیاید.

بیشتر فریمورک های php مثل لاراول و CakePHP از متدهای static php استفاده میکنند.

منبع: دوره شی گرایی 7learn و سایت geeksforgeeks

phpاستاتیک
مهندسی نرم افزار و توسعه دهنده وب | نکاتی در مورد وب که فکر میکنم میتونه واسه خیلی ها مناسب باشد رو منتشر میکنم.
شاید از این پست‌ها خوشتان بیاید