PDA

View Full Version : سوال: توضیح کامل راجع به static در کلاس بدهید ؟



mosi2007
دوشنبه 11 اردیبهشت 1391, 03:22 صبح
سلام
توضیح درست حسابی پیدا نکردم تو اینترنت و تو این فروم راجع به استاتیک
قبل ازانکه دوستان توضیحی بدهند این کد را نگاه کنند
خب امکانش هست که این کد رو برام درستش کنید


<?php
class MyClass
{

public $count = 0;

public function plusOne()
{
return "The count is ". $this->count=$this->count++."<br />" ;
}
}
$obj=new MyClass;
do{
echo $obj->plusOne();
}while ($obj->$count < 15);
?>




بعد سوال اصلی هم اینه که تو عنوان تاپکی
مثل این نمونه


<?php
class MyClass
{

public static $count = 0;

public function plusOne()
{
return "The count is ". ++self::$count."<br />" ;
}
}


do{
echo Myclass::plusOne();
}while (Myclass::$count< 15);



تو این مثال همه چیز مشخصه که کار استاتیک چیه توی کلاس ولی بازم لنگه یه توضیح خوبی هستم
با چند تا مثال دیگه از استاتیک
بعد اینکه ایا استاتیک فقط برای کار با اعداد به کار میرود در کلاس ؟؟؟

Hamid.RDN
دوشنبه 11 اردیبهشت 1391, 03:40 صبح
متغیر ها(پراپرتی ها)ی استاتیک خواص زیر رو دارن:
۱- فقط یک نمونه از روشون ساخته می شه
یعنی اگه ۱۰ تا آبجکت از روی کلاس بسازید هموشون به یک متغیر استاتیک اشاره می کنن
۲- با استفاده از CLASSNAME::$var یا self::$var فراخوانی میشن و این یعنی نیازی به ایجاد شئ وجود نداره واسه دسترسی بهشون
۳- میتونن به هرتعداد و از هر نوعی باشن

mosi2007
دوشنبه 11 اردیبهشت 1391, 10:44 صبح
ممنون


سلام
توضیح درست حسابی پیدا نکردم تو اینترنت و تو این فروم راجع به استاتیک
قبل ازانکه دوستان توضیحی بدهند این کد را نگاه کنند
خب امکانش هست که این کد رو برام درستش کنید


<?php
class MyClass
{

public $count = 0;

public function plusOne()
{
return "The count is ". $this->count=$this->count++."<br />" ;
}
}
$obj=new MyClass;
do{
echo $obj->plusOne();
}while ($obj->$count < 15);
?>





پس جواب این سوالم چی شد؟

Hamid.RDN
دوشنبه 11 اردیبهشت 1391, 11:36 صبح
بفرمایید:


class MyClass
{
public $count = 0;

public function plusOne()
{
return "The count is ". $this->count++."" ;
}
}

$obj=new MyClass;
do
{
echo $obj->plusOne();
} while ($obj->count < 15);

mosi2007
دوشنبه 11 اردیبهشت 1391, 16:31 عصر
متغیر ها(پراپرتی ها)ی استاتیک خواص زیر رو دارن:
۱- فقط یک نمونه از روشون ساخته می شه
یعنی اگه ۱۰ تا آبجکت از روی کلاس بسازید هموشون به یک متغیر استاتیک اشاره می کنن
۲- با استفاده از CLASSNAME::$var یا self::$var فراخوانی میشن و این یعنی نیازی به ایجاد شئ وجود نداره واسه دسترسی بهشون
۳- میتونن به هرتعداد و از هر نوعی باشن

یعنی اگه ما یه متغیر از نوع static تو کلاس داشته باشیم همه کلاس میفته دست این متغیرو و دیگه هیچ کاری دیگه ای بجز استفاده از اون متغیر استاتیک نمیشه تو کلاس انجام داد ؟؟؟ یعنی کلاس = با فقط استفاده از اون متغیر استاتیک

بعد یه چند تا مثال خوب و ساده هم بزنید

MMSHFE
دوشنبه 11 اردیبهشت 1391, 16:47 عصر
نه دوست عزیز، متغیرهای static تنها فرقی که با متغیرهای معمولی دارن اینه که برخلاف متغیرهای عادی که هر شئ مقدار خاص خودشو توی اون متغیر ذخیره میکنه، این متغیرها فقط یکبار تعریف میشن و با کمک اسم کلاس میشه بهشون دسترسی داشته باشیم (نه اسم شئ). بیشتر کاربردشون هم اشتراک اطلاعات بین اشیاء ایجادشده از کلاس هست. مثلاً توی یک شئ، متغیر static رو مقداردهی کنیم و توی شئ دیگه بخونیمش. یا مشابه مثالی که گذاشته شده، تعداد اشیاء ایجادشده از کلاس رو بفهمیم و...
موفق باشید.

mosi2007
دوشنبه 11 اردیبهشت 1391, 16:51 عصر
شما ها خیلی خوب توضیح میدید ولی من یکم اینجوریم :گیج:
فهمش یکم برام سخته مگه اینکه چند تا یا حداقل 2 تا مثال هم براش بزنید
ممنون

Hamid.RDN
دوشنبه 11 اردیبهشت 1391, 18:22 عصر
به این کد نگاه کنید


class TestStatic
{
public $pub_var = 0;
public static $sta_var = 0;

public function inc()
{
$this->pub_var++;
TestStatic::$sta_var++;
}
}

$obj1 = new TestStatic();
$obj2 = new TestStatic();

$obj1->inc();
$obj1->inc();

echo $obj1->pub_var;
echo '<br>';
echo $obj2->pub_var;
echo '<br>';
echo TestStatic::$sta_var;


pub_var$ توی شئ دوم مقدارش صفر هست چون روی شئ متد inc فراخوانی نشده
اما متغیر استاتیک کاری به فراخوانی اشیاء نداره و وقتی اضافه می شه برای همه اضافه میشه.

امیـرحسین
سه شنبه 12 اردیبهشت 1391, 18:09 عصر
این مقاله شاید در رابطه با مفاهیم تا حدودی مفید باشه: http://boplo.ir/php/php-static-keyword/