PDA

View Full Version : سوال در مورد شی گرایی



sepehrmm
پنج شنبه 20 فروردین 1388, 19:21 عصر
هر چی تو راهنمای خود php و pdf ها گشتم جواب سوالمو پیدا نکردم :
چطوری میشه در یک کلاس مشتق شده به یک variable member کلاس والد دسترسی داشت ؟
همانطوری که میدونید برای دسترسی به متد والد در فرزند از کد زیر استفاده میشه که برای variable member جوابگو نیست :


parent::show();

امیـرحسین
پنج شنبه 20 فروردین 1388, 21:49 عصر
اتفاقا من هم دنبال این موضوع بودم. سرچ کردم و به دردبخورترین راه حل این بود که اون property ها رو توی متد constructor والد مقدار بدید:

class ParentClass {

public $options;
public function __construct() {
$this->options = array(
'option1'=>'setting1'
);

}

//The rest of the functions would follow
}
class ChildClass extends ParentClass {

public function __construct() {
parent::__construct();
$this->options['option2'] = 'setting2';
}

//The rest of the functions would follow
}

این رو یکی اینجا (http://stackoverflow.com/questions/224106/appending-to-an-array-variable-in-a-parent-class-in-php) پیشنهاد کرده.

امیـرحسین
پنج شنبه 20 فروردین 1388, 22:13 عصر
توی PHP5 از constantها (http://ir.php.net/manual/en/language.oop5.constants.php) هم برای ساختن ثابت میشه استفاده کرد که ظاهرا همه جا اعتبار دارند.

sepehrmm
شنبه 22 فروردین 1388, 11:37 صبح
آقا دستت درد نکنه .
ولی آیا این مساله ( عدم امکان دسترسی مستقیم به propertyهای کلاس والد در کلاس فرزند ) در بقیه زبانهایی که شی گرایی رو ساپورت میکنند هم وجود داره یا php اینطوریه ؟

امیـرحسین
شنبه 22 فروردین 1388, 18:55 عصر
به نظر میاد که اینجوره که شما میگید چون من وقتی سرچ کردم دیدم قبلا هم همچین سوالی پرسیده شده و راهکار استانداردی (ظاهرا) براش وجود نداره.

yaqubian
یک شنبه 23 فروردین 1388, 10:24 صبح
دوست عزیز
من پیشنهاد می کنم جهت آشنایی کامل با مطالب خواسته شده، کتاب pro php رو مطالعه بفرمایید.
موفق باشید

امیـرحسین
شنبه 05 اردیبهشت 1388, 17:20 عصر
من این روش جدیدا به ذهنم اومد گفتم به این تاپیک اضافه کنم.
میشه یه متد برای گرفتن Property توی کلاس Parent قرار داد و توی کلاسهای Child اون رو Call کرد:

class parent {
....
function getProperty($property)
{
return $this->$property;
}
....
}


class child extends parent {
....
$property1 = parent::getProperty("member1");
....
}


موفق باشید