鍍金池/ 問答/PHP/ 7.1好像不支持可變函數呀(更可能是我用得不對)

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

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

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

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

回答
編輯回答
傻叼

$fun()這樣的寫法有點問題。。。。用{}包裹起來看看

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

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

2017年3月10日 15:32
編輯回答
清夢

如上面所說,用 $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í)行結果

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

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

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

檢查一下 $fun 和 $class 的值是否和對應的calss和方法的名字大小寫一樣。
我測試過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 '這里是一個代碼行';
    }
}

$class_str = 'Test';

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

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

2017年2月20日 05:54