اشکان کاظمی
3 سال پیش توسط اشکان کاظمی مطرح شد
6 پاسخ

فراخوانی یک متد در php

سلام .
فرض کنین من چند تا متد درون یک کلاس دارم که یدونه از اونها فرض کنین 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 وارد شده و منم هم اونو گرفتم و متدی با همین نام دارم و با همین ورودی که فرستاده شده میخام متدم رو فراخوانی کنم
خوشحال میشم نظراتتونو بشنوم


ثبت پرسش جدید
سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@SobhanDadkhah 3 سال پیش آپدیت شد
1

با سلام. به روش زیر میتونید داینامیک متد هاتون رو صدا بزنید.

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


مجتبی دلشاد
تخصص : توسعه دهنده بک اند
@delshad 3 سال پیش مطرح شد
0

اگه منظورتونو درست متوجه شده باشم میخواید فانکشن pride رو توی فانکشن carName کال کنید
برای اینکار میتونید از $this بصورت زیر استفاده کنید

    class Car
    {
        public $car_name ;

        public function carName($carname)
        {
            $this->car_name = $carname ;
            $car = $this->pride();
        }

        public function pride()
        {
            return "salam";
        }
    }

اشکان کاظمی
تخصص : برنامه نویس سمت سرور
@ashkan.kazemi 3 سال پیش مطرح شد
0

@delshad
ممنون رفیق
ولی این یک مثاله ...
دراصل من چند تا متد دارم و ورودی های منم به تعداد متد هام هست
هر بار یک ورودی داده میشه و من نمیدونم چی هست
بر اساس اون ورودی باید متد مورد نظر رو صدا بزنم


سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@SobhanDadkhah 3 سال پیش آپدیت شد
1

با سلام. به روش زیر میتونید داینامیک متد هاتون رو صدا بزنید.

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


مجتبی دلشاد
تخصص : توسعه دهنده بک اند
@delshad 3 سال پیش مطرح شد
0

خب فرض میکنیم ۳ تا ورودی مشخص داریم مثلا 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 رو برمیگردونه اگه مقداری وارد کرد که برای ما مشخص نبود تعیین میکنیم چه پیغامی به کاربر نمایش بده

امیدوارم اینبار منظورتو درست متوجه شده باشم :))


سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@SobhanDadkhah 3 سال پیش مطرح شد
1

@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");

مستندات

موفق و پیروز باشید 😎


اشکان کاظمی
تخصص : برنامه نویس سمت سرور
@ashkan.kazemi 3 سال پیش مطرح شد
1

@SobhanDadkhah
ممنون خیلی کامل و عالی بود
نکته جالبی بود👌


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام