使用变量调用函数

时间:2013-05-29 04:39:37

标签: php

我正在尝试使用php变量调用函数。您将在function mainFunction()的代码中看到。如果不可能这样做,有没有更好的方法来避免更多的代码呢?我希望它会这样工作。

<?php
$a = 1;
$b = 1;

if ( $a == $b ) {
   $exampleFunction = 'exampleOne';
} else {
   $exampleFunction = 'exampleTwo';
}

//----------------------------------------------

mainFunction();

function mainFunction() {
global $exampleFunction;
    echo 'This is mainFunction <br>';
    $$exampleFunction();//Here's where I'm stuck.
}

function exampleOne() {
    echo 'This is example one <br>';
}

function exampleTwo() {
    echo 'This is example two <br>';
}
?>

5 个答案:

答案 0 :(得分:3)

解决这个问题的方法是使用PHP的call_user_func函数。这是修改后的代码(它也删除了全局变量):

代码示例

<?php

$a = 1;
$b = 1;

// I'm just using this to hold the function name,
// to get rid of the global keyword. It will be passed
// as an argument to our mainFunction()
$exampleFunction = '';

if ($a == $b) {
    $exampleFunction = 'exampleOne';
} else {
    $exampleFunction = 'exampleTwo';
}

//----------------------------------------------

mainFunction($exampleFunction);

function mainFunction($func) {
    echo 'This is mainFunction <br>';
    // Use PHP's call_user_func. We are also checking to make sure
    // the function exists here.
    if (function_exists($func)) {
        // This will call the function.
        call_user_func($func);
    }
}

function exampleOne() {
    echo 'This is example one <br>';
}

function exampleTwo() {
    echo 'This is example two <br>';
}

输出

当我运行此代码时,它会产生以下输出:

This is mainFunction 
This is example two 

答案 1 :(得分:1)

仅使用$exampleFunction,不使用$$

<?php
function mainFunction() {
    global $exampleFunction;
    echo 'This is mainFunction <br>';
    $exampleFunction();
}
?>

请参阅变量函数manual,而不是变量

PS: 另外,我建议$exampleFunctionmailFunction global,而不是{{1}} }第

答案 2 :(得分:1)

尝试

if ( $a == $b ) {
   $exampleFunction = exampleOne();
} else {
   $exampleFunction = exampleTwo();
}

并且您的函数应该像

一样返回
function exampleOne() {
    return 'This is example one <br>';
}

function exampleTwo() {
    return 'This is example two <br>';
}

OR 如果您想通过变量调用它们尝试替换

function mainFunction() {
   global $exampleFunction;
     echo 'This is mainFunction <br>';
     $exampleFunction();
 }

答案 3 :(得分:1)

尝试使用$exampleFunction();代替$$exampleFunction();

使用call_user_func($exampleFunction)

答案 4 :(得分:1)

检查这种方式: -

function mainFunction() {
global $exampleFunction;
echo 'This is mainFunction <br>';
$exampleFunction();
 }