راکت

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

3 پاسخ

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

$functionName="functionOne";// functionTwo , functionThree , functionFour
$functionName();
ثبت پرسش جدید

پاسخ‌ها

3
محسن مهری
محسن مهری
@mohsen.mehri6101

تخصص: برنامه نویس back-end با زبان php framework laravel

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

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

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

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

$call = 'myFunction';

$call();
?>

شاید پاسخ شما همین‌جا باشد

woz
woz
@wozniak

تخصص: fan of open source world

سلام به مثالهای زیر از سایت 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;
        }
    }

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

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