鍍金池/ 問(wèn)答/PHP/ 7.1好像不支持可變函數(shù)呀(更可能是我用得不對(duì))

7.1好像不支持可變函數(shù)呀(更可能是我用得不對(duì))

在寫mvc的過(guò)程中,開始在路由里寫了可變函數(shù)用來(lái)動(dòng)態(tài)執(zhí)行方法,如下:

<?php
$obj = new $class();
$obj -> $fun();

在7.1上提示PHP Fatal error: Uncaught Error: Function name must be a string in

回答
編輯回答
傻叼

$fun()這樣的寫法有點(diǎn)問(wèn)題。。。。用{}包裹起來(lái)看看

2017年8月26日 07:16
編輯回答
筱饞貓

多謝各位解答其實(shí)call_user_func就能解決,前幾天解決了,忘了告訴大家

2017年3月10日 15:32
編輯回答
清夢(mèng)

如上面所說(shuō),用 $ojb->{$fun}() 或則用 call_user_func(array($obj, $fun));

2017年10月25日 11:41
編輯回答
北城荒

我的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();

執(zhí)行結(jié)果

C:\Users\salamander\Desktop>php code.php
salamander
2017年12月11日 12:48
編輯回答
薄荷糖

既然有提示說(shuō)$fun必需是string, 那你看看$fun的值咯. 至少函數(shù)命名規(guī)則你得保證噻.
從你這兩句里面是肯定沒(méi)有$fun變量的

2017年1月26日 14:32
編輯回答
雨萌萌

檢查一下 $fun 和 $class 的值是否和對(duì)應(yīng)的calss和方法的名字大小寫一樣。
我測(cè)試過(guò)7.0.1是可以用的。

2017年2月25日 16:09
編輯回答
近義詞
<?php
$obj = new $class();
$obj -> {$fun}();// do it like this;
2017年12月9日 19:00
編輯回答
淡墨
<?php
class Test {
    public function run() {
        echo '這里是一個(gè)代碼行';
    }
}

$class_str = 'Test';

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

以上是我在ubuntu下,php環(huán)境7.1.12中的測(cè)試代碼,可以完整的輸出.
請(qǐng)查看一下你的$class這個(gè)變量是否為字符串,還要看一下你要實(shí)例的類是否包含命名空間,
如果有命名空間,就需要加上命名空間

2017年2月20日 05:54