【问题标题】:function name must be a string PHP函数名必须是字符串 PHP
【发布时间】:2013-12-11 22:37:48
【问题描述】:

当我尝试调用函数 func_connect_mssql 时出现此错误。

这是我的代码:

    $func_connect   = 'func_connect_mssql';
    $session = $func_connect($serv, $user, $pass, $base) 
or die("<p class='Perror'>&middot;Failed - err Connect: ".$func_error()."</p>");

你可以看到 func_connect 是一个我用来调用函数的变量,这就是我使用“$func_connect”的原因,我试图改变它并直接输入我的函数的名称,但仍然返回相同的错误第二行。

【问题讨论】:

  • 尝试:$session = $$func_connect(
  • "我试图改变它并直接输入我的函数名称" 你试过func_connect_mssql($serv, $user, $pass, $base)?那应该可以。
  • 您确定错误是在$func_connect(...) 而不是$func_error(...)?
  • 你运行的是什么版本的 PHP?
  • 在你的情况下使用派生类并利用多态性不是更好吗?

标签: php


【解决方案1】:

你有点被自己的代码误导了:

$func_connect   = 'func_connect_mssql';
$session = $func_connect($serv, $user, $pass, $base) or die("<p class='Perror'>&middot;Failed - err Connect: ".$func_error()."</p>");

相反,您至少应该将其包装在多行中:

$func_connect   = 'func_connect_mssql';
$session = $func_connect($serv, $user, $pass, $base)
    or die("<p class='Perror'>&middot;Failed - err Connect: ".$func_error()."</p>")
    ;

然后错误消息将告诉您错误发生在哪一行。您会惊讶地发现它所处的位置与您目前认为的不同。

由于您的代码看起来有点脆弱,您可能还需要不时添加一些安全网:

$func_connect   = 'func_connect_mssql';

is_callable($func_connect)) or die('Connection Function is not callable!');
is_callable($func_error)) or die('Error function is not callable!');

$session = $func_connect($serv, $user, $pass, $base)
    or die("<p class='Perror'>&middot;Failed - err Connect: ".$func_error()."</p>")
    ;

【讨论】:

  • +1 一个,我根据您的精明评论删除了我的答案:)
  • 我按照 Fluffeh 的建议使用了 call_user_func 但还是一样,所以你的意思是问题不是来自函数的调用?
  • @cascadox:我在答案中提出了两种编写代码的替代方法。玩弄这些(键入它们,不要复制它们),您应该了解更多问题所在。这并不意味着它已经解决了你的问题,但是找到它是一个先决条件。
  • @cascadox Hakra 正在向您展示如何通过消除两个代码部分中的一个将故障排除减半不是罪魁祸首。
  • 根据错误信息,它不是字符串。另一个解决问题的朋友是var_dump() - 你可以用它来查看变量。也永远不要在浏览器中查看闪亮显示错误消息,而是在浏览器的源视图中。
【解决方案2】:

试试这个:call_user_func()

$func_connect   = 'func_connect_mssql';
$session = call_user_func($func_connect,$serv, $user, $pass, $base) or die("<p class='Perror'>&middot;Failed - err Connect: ".$func_error()."</p>");

【讨论】:

  • 为什么?这不与变量函数已经完成的完全一样吗? php.net/manual/en/functions.variable-functions.php
  • 这工作正常:function func_connect_mssql($serv, $user, $pass, $base) { return 1; } 函数 errrr() { 返回 'asas'; } $func_connect = 'func_connect_mssql'; $func_error = 'errrr'; echo $func_connect('s', 'd', 'f', 'sa') 或 die("

    ·Failed - err Connect: ".$func_error()."

    ");死();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
  • 2019-10-04
  • 1970-01-01
相关资源
最近更新 更多