PDA

View Full Version : حرفه ای: abstract وfinan تو کلاس یعنی چی؟



yakouza
سه شنبه 06 اردیبهشت 1390, 16:44 عصر
<?php
final class Registry {
static private $data = array();

static public function get($key) {
return (isset(self::$data[$key]) ? self::$data[$key] : NULL);
}

static public function set($key, $value) {
self::$data[$key] = $value;
}

static public function has($key) {
return isset(self::$data[$key]);
}
}
?>




<?php
abstract class Model {
public function __get($key) {
return Registry::get($key);
}

public function __set($key, $value) {
Registry::set($key, $value);
}
}
?>


اینم کداش

payamsp
چهارشنبه 07 اردیبهشت 1390, 12:41 عصر
کلاسی که به صورت abstract تعریف بشه فقط می تونه به عنوان کلاس پدر به ارث بره و امکان ساختن شی از روی اون وجود نداره و کلاسی که final باشه بر عکسه یعنی امکان این که به عنوان کلاس پدر ازش استفاده کنیم وجود نداره و فقط میشه از روی اون شی ساخت .

yakouza
پنج شنبه 08 اردیبهشت 1390, 17:35 عصر
خب این کار چه مزیتی داره میشه مزیت شو بگید.
چه وفت باید از abstract استفاده شه و چه وقت از final.

payamsp
پنج شنبه 08 اردیبهشت 1390, 18:36 عصر
برای مثال وقتی از الگوهای طراحی مثله MVC استفاده می کنید کلاس های پایه مثله model , view , controller رو می تونید به صورت abstract تعریف کنید تا بقیه controller ها , model ها از این کلاس های پایه به ارث برند .
یا وقتی که می خواید از چند ریختی استفاده کنید تعریف کردن abstract کلاس می تونه کاربرد داشته باشه .
به طور کل اگر با برنامه نویسی شی گرا آشنا بشید می تونید نیاز به این نوع کلاس ها رو درک کنید .

Cyletech
جمعه 09 اردیبهشت 1390, 11:05 صبح
دوست من ، شما بیشتر باید با علم شیء گرایی آشنا بشید. اگر خوب اون رو درک کنید (بواسطه مطلب خوندن و فهمیدن قسمت قسمته اون) بدونه اینکه سوالی مطرح کنید خودتون متوجه میشید. مثلاً در اینجا مشکل شما اینه که هنوز نمیدونید چرا کلاسی باید پدر باشه که بخواد فرزند داشته باشه!
در شیء گرایی کار برنامه نویسان خیلی راحته. فرض کنید شما یک کلاس دارید که مخصوص حیوانات هست و هر حیوون رو توش تعریف کردید و برای هر حیوون یک کلاس دیگه تعریف کردید. برای اینکه اون کلاس های حیوون بتونن دسترسی به کلاس اصلی که در اون صدا ها مشخص شده داشته باشند باید حتماً بعنوان فرزند اون کلاس تعریف بشن (با extends) اما این زمانی امکان پذیره که یا برای کلاس پدر چیزی تعریف نشده باشه (مثل final یا غیره) یا اینکه از abstract استفاده شده باشه چون abstract همونطور که دوستمون گفت اجازه میده کلاس ، پدر کلاس دیگه ای هم باشه.
اما حالا سوال شما اینجا این می تونه باشه که چرا باید اصلاً از اینها استفاده کنیم. طبق فرموده وحید سهرابلو (http://forum.iranphp.org/User-admin) از این دستورات در شیء گرایی فقط برای ساده کردن برنامه نویسی استفاده می کنیم و تعریف کردن یا نکردنش فرقی نداره. در حقیقت اینها سطح دسترسی های بعدی رو مشخص می کنن و مثلاً فرض کن اول شما قرار نیست به کلاسی فرزند بدی ، اونوقت از final استفاده می کنی اما بعداً تصمیم میگیری که فرزند بدی ، اونوقت خطا دریافت می کنی که کلاس نمی تونه فرزند کلاس final باشه. پس اینجا کار برنامه نویس برای تشخیص خطا راحت تره. و خیلی مزیت های دیگه داره.

yakouza
جمعه 09 اردیبهشت 1390, 23:56 عصر
ممنون شی گرایی تا حدودی بلدم منتها اینایی که گفتم رو تازه دیده بودم.