为了账号安全,请及时绑定邮箱和手机立即绑定

7.1好像不支持可变函数呀(更可能是我用得不对)

7.1好像不支持可变函数呀(更可能是我用得不对)

PHP
临摹微笑 2019-03-12 16:21:11
在写mvc的过程中,开始在路由里写了可变函数用来动态执行方法,如下: <?php $obj = new $class(); $obj -> $fun(); 在7.1上提示PHP Fatal error: Uncaught Error: Function name must be a string in
查看完整描述

8 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

<?php
$obj = new $class();
$obj -> {$fun}();// do it like this;
查看完整回答
反对 回复 2019-03-18
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

$fun()这样的写法有点问题。。。。用{}包裹起来看看

查看完整回答
反对 回复 2019-03-18
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

我的PHP版本:PHP 7.1.12 (cli) (built: Nov 23 2017 04:20:40) ( NTS MSVC14 (Visual C++ 2015) x64 )

Code

<?php

class Person
{
    private $name;

    function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

$obj = new Person('salamander');
$fun = 'getName';
echo $obj->$fun();

执行结果

C:\Users\salamander\Desktop>php code.php
salamander
查看完整回答
反对 回复 2019-03-18
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

<?php
class Test {
    public function run() {
        echo '这里是一个代码行';
    }
}

$class_str = 'Test';

$test = new $class_str();
$test->run();

以上是我在ubuntu下,php环境7.1.12中的测试代码,可以完整的输出.
请查看一下你的$class这个变量是否为字符串,还要看一下你要实例的类是否包含命名空间,
如果有命名空间,就需要加上命名空间

查看完整回答
反对 回复 2019-03-18
?
烙印99

TA贡献1829条经验 获得超13个赞

既然有提示说$fun必需是string, 那你看看$fun的值咯. 至少函数命名规则你得保证噻.
从你这两句里面是肯定没有$fun变量的

查看完整回答
反对 回复 2019-03-18
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

多谢各位解答其实call_user_func就能解决,前几天解决了,忘了告诉大家

查看完整回答
反对 回复 2019-03-18
  • 8 回答
  • 0 关注
  • 430 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信