سلام .
فرض کنین من چند تا متد درون یک کلاس دارم که یدونه از اونها فرض کنین x هست که یدونه پارامتر میگیره
اون پارامتری که کاربر وارد میکنه با انجام یک سری از پردازش هایی مثلا y در میاد ، من هم متدی با نام y رو دارم و الان نام متد y من درون یک پراپرتی ذخیره شده
چطور میتونم از طریق این پراپرتی اشاره کنم که متد y من اجرا بشه
مثال میزنم شاید واضح تر بتونم منظور رو برسونم :
class Car
{
public $car_name ;
public function carName($carname)
{
$this->car_name = $carname ;
// ...
}
public function pride()
{
return "salam";
}
}
$car = new Car ;
$car->carName("pride");
خب اینجا pride وارد شده و منم هم اونو گرفتم و متدی با همین نام دارم و با همین ورودی که فرستاده شده میخام متدم رو فراخوانی کنم
خوشحال میشم نظراتتونو بشنوم
با سلام. به روش زیر میتونید داینامیک متد هاتون رو صدا بزنید.
class Car
{
public $car_name ;
public function carName($carname)
{
$this->car_name = $carname ;
$this->$carname($parameters);
}
public function pride()
{
return "salam";
}
}
$car = new Car ;
$car->carName("pride");
از فانکشن هایی مثل call_user_func و موارد مشابه هم میتونید استفاده کنید.
مثال StackOverflow
مستندات calluserfunc
اگه منظورتونو درست متوجه شده باشم میخواید فانکشن pride
رو توی فانکشن carName
کال کنید
برای اینکار میتونید از $this
بصورت زیر استفاده کنید
class Car
{
public $car_name ;
public function carName($carname)
{
$this->car_name = $carname ;
$car = $this->pride();
}
public function pride()
{
return "salam";
}
}
@delshad
ممنون رفیق
ولی این یک مثاله ...
دراصل من چند تا متد دارم و ورودی های منم به تعداد متد هام هست
هر بار یک ورودی داده میشه و من نمیدونم چی هست
بر اساس اون ورودی باید متد مورد نظر رو صدا بزنم
با سلام. به روش زیر میتونید داینامیک متد هاتون رو صدا بزنید.
class Car
{
public $car_name ;
public function carName($carname)
{
$this->car_name = $carname ;
$this->$carname($parameters);
}
public function pride()
{
return "salam";
}
}
$car = new Car ;
$car->carName("pride");
از فانکشن هایی مثل call_user_func و موارد مشابه هم میتونید استفاده کنید.
مثال StackOverflow
مستندات calluserfunc
خب فرض میکنیم ۳ تا ورودی مشخص داریم مثلا red - black - green
خب حالا مقداری که کاربر وارد کرده رو میدیم به متد اصلی که بر اساس ورودی مشخص کنه کدوم متد اجرا بشه
class Car
{
public $car_name ;
public function color($color)
{
if ($color == 'red')
{
return $this->red();
}
elseif ($color == 'black')
{
return $this->black();
}
elseif ($color == 'green')
{
return $this->green();
}
else
{
return 'پراید این رنگی نداریم :(';
}
}
public function red()
{
return "pride ghermez";
}
public function black()
{
return "pride meshki";
}
public function green()
{
return "pride sabz";
}
}
$car = new Car();
print_r($car->color('green'));
توی کد زیر اگه کاربر مقدار red
رو وارد کنه متد red
اجرا میشه و مقدار pride ghermez
رو برمیگردونه اگه مقداری وارد کرد که برای ما مشخص نبود تعیین میکنیم چه پیغامی به کاربر نمایش بده
امیدوارم اینبار منظورتو درست متوجه شده باشم :))
@ashkan.kazemi
موردی که میتونید برای مدیریت خطا هم در نظر بگیرید و فراموش کردم این هست که میتونید از تابع زیر چک بکنید که متد شما وجود داره یا خیر و اینطوری خطای دلخواه خودتون رو نمایش بدید . البته بستگی به پروژه داره و شاید هرگز ورودی اشتباهی وارد نشه.
method_exists(object|string $object_or_class, string $method)
// ---------
class Car
{
public $car_name ;
public function carName($carname)
{
$this->car_name = $carname ;
$this->$carname($parameters);
}
public function pride()
{
return "salam";
}
}
$car = new Car ;
method_exists($car, 'pride'); // true
method_exists($car, 'tiba'); // false
$car->carName("pride");
موفق و پیروز باشید 😎
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟