PDA

View Full Version : متد و پراپرتی همنام در یک کلاس



IMANAZADI
پنج شنبه 26 فروردین 1395, 15:59 عصر
با سلام


میشه در یک کلاس یک متد و یک پراپرتی همنام داشت ؟؟؟


مشکلی ایجاد نمیکنه ؟؟؟




برای دسترسی به متدها و یا پراپرتی ها بصورت داینامیک چگوته باید عمل کرد ؟؟


مثلا کلاس زیر رو در نظر بگیرید




آیا به این صورت صحیح هست و مشکلی نداره






class test
{


private $one='yek';


private function one($par)
{
echo $par;
}




public function accessProperties($p)
{
echo $this->$p; //for example : accessProperties('one');


}




public function accessMethod($met,$par)
{
echo $this->$met($par); //for example : accessMethod('one','hello world');


}




}

Farshid007
جمعه 27 فروردین 1395, 04:09 صبح
بله می شود یک متد با یک پراپرتی همنام باشند
اما تو این کلاسی که شما مثال زدید
وقتی که از کلاس یک نمونه بسازیم به one$ نمیشه دسترسی داشت چون private هست و همچنین به متد one
اما مثلا فرض کنیم که این دوتا private نباشن


class test
{


var $one='yek';


function one($par)
{
echo $par;
}
}

//Exp :
$test=new test();
echo $test->one;//var $one
$test->one($salam);//function one


نگاه کنید تفاوتشون رو . وقتی که متد one رو فراخوانی کردیم پرانتز گذاشتیم اما وقتی که متغیر one رو چاپ کردیم احتیاجی به پرانتز نبود.

این کلاسی که نوشتید مشکلش اینه که وقتی که شما یک تابع درست کردید و برای اون پارامتر گذاشتید از اون پارامتر فقط تو بلاک همون تابع میشه استفاده کرد اونم نه به اون شکل بلکه به شکل معمولی
نمیدونم اینی که نوشتید رو با چه محیطی نوشتید که وقتی <-this$ رو تایپ کردید پارامتر هارو لیست کرده:متعجب:

وقتی که شما مثلا تو فانکشن accessproperties پارامتر p$ را فرستادید داخل بلاک این متد این متغیر را معمولی استفاده کنید ن با this$
درست این فانکشن اینجوری میشه:


public function accessProperties($p)
{
echo $p; //for example : accessProperties('one');
}