محسن مهری
4 سال پیش توسط محسن مهری مطرح شد
3 پاسخ

فراخوانی تابع با نام پویا

سلام من چهار تابع دارم با چهار اسم مختلف
میخام اسم تابع رو توی یک متغیر ذخیره کنم و با اون متغیر اون تابع رو فراخونی کنم- آیا این کار شدنیه ؟
البته میدونم که میتونم با switchCase این عمل رو شبیه سازی کنم اما خواستم بپرسم پیشرفته‌تر و داینامیک تر هم میشه این کار رو کرد؟

$functionName="functionOne";// functionTwo , functionThree , functionFour
$functionName();

ثبت پرسش جدید
محسن مهری
تخصص : برنامه نویس back-end با زبان...
@mohsen.mehri6101 4 سال پیش مطرح شد
0

@ali.bayat آقای بیات لطفا راهنمایی کنید


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

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

<?php
function myFunction(){
echo "Hello World";
}

$call = 'myFunction';

$call();
?>

woz
تخصص : fan of open source world
@wozniak 4 سال پیش مطرح شد
1

سلام به مثالهای زیر از سایت php.net توجه بفرمایید :
https://www.php.net/manual/en/functions.variable-functions.php

<?php
function foo() {
    echo "In foo()<br />\n";
}

function bar($arg = '')
{
    echo "In bar(); argument was '$arg'.<br />\n";
}

// This is a wrapper function around echo
function echoit($string)
{
    echo $string;
}

$func = 'foo';
$func();        // This calls foo()

$func = 'bar';
$func('test');  // This calls bar()

$func = 'echoit';
$func('test');  // This calls echoit()
?>

اگر داخل کلاس می خواهید این کار رو انجام بدید ، میتونید از Magic Function __call استفاده کنید. یه راه دیگر هم داخل کلاس ها اینه که متدها رو تعریف کرده باشید و بعد برای فراخوانی به صورت زیر عمل کنید ( در حالت کلاس و تابع غیر استاتیک مثلا ):

    public function invoke($functionName, $inputs)
    {
        try {
            return $this->{$functionName}($inputs);
        }catch (\Exception $exception) {
            throw $exception;
        }
    }

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

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