PDA

View Full Version : سوال: دسترسی به متد یک کلاس از داخل کلاس دیگر



eliTive
دوشنبه 07 تیر 1389, 19:19 عصر
سلام دوستان
چطور می شه از داخل یک کلاس یه یک تابع از کلاس دیگر اشاره کرد؟



class A {
var $value1;
function write ()
{
echo $this->value1;
}
}

class B {

function get_data($name)
{
A::write();
}
}
این یه مثال ساده هست من می خوام از داخل کلاس B بتونم به متد write از کلاس A دسترسی داشته باشم. آیا راهی به جز اینکه یه شیء از کلاس A ایجاد کنیم وجود داره؟

pashaie
دوشنبه 07 تیر 1389, 19:25 عصر
آیا راهی به جز اینکه یه شیء از کلاس A ایجاد کنیم وجود داره؟
می تونی متد مورد نظر رو استاتیک تعریف کنی، در این صورت از نوتیشن A::write(); باید استفاده کنی.

eliTive
دوشنبه 07 تیر 1389, 19:48 عصر
انجام دادم ولی نمیشه از $this ایراد میگیره. امتحان کن دوست عزیز.

pashaie
دوشنبه 07 تیر 1389, 20:21 عصر
انجام دادم ولی نمیشه از $this ایراد میگیره. امتحان کن دوست عزیز.
تو توابع استاتیک فقط می تونید از متغییر های استاتیک استفاده کنید.
متغییر $this به شی فعلی اشاره میکنه، توجه کنید که شما بدون ایجاد یک شی، تابع استاتیک رو فراخوانی می کنید. پس منطقیه که $this به چیزی اشاره نمی کنه.
در واقع همونطور هم که بالا گفتم، تو متد های استاتیک از متغییر های غیر استاتیک که تنها با ایجاد یک شی ایجاد می شند نمی شه استفاده کرد.

eliTive
دوشنبه 07 تیر 1389, 21:44 عصر
pashaie (http://barnamenevis.org/forum/member.php?u=69316) عزیز میشه با مثال راه حل رو توضیح بدید.

pashaie
دوشنبه 07 تیر 1389, 22:56 عصر
pashaie (http://barnamenevis.org/forum/member.php?u=69316)
عزیز میشه با مثال راه حل رو توضیح بدید.

خدمت شما:


<?php
class A {
public static $value1 = "default";
static function write ()
{
echo A::$value1 . "<br/>";
}
}

class B {

function get_data($name)
{
A::write();
A::$value1 = "new value";
A::write();
}
}

$b = new B;
$b->get_data('dummy');

?>