在另一个帮助器中调用自定义帮助器方法会引发语法错误

时间:2015-05-19 09:28:33

标签: php laravel laravel-5

我的项目根目录中有帮助程序文件夹(因此,在 app / 文件夹之外)。在我的 composer.json 中,我自动加载了它:

"autoload": {
        "classmap": [
            "app/Http/Controllers",
            "app/Models",
            "database",
            "libraries",
            "helpers" // <- Helpers autoloaded here
        ],
       ...
    },

帮助程序的方法是静态的,它们在视图和控制器中正常工作。现在我试图在第二个(Helper_2.php)中使用一个助手(Helper_1.php),如下所示:

    class Helper_2 {

        protected static $value = Helper_1::getValue();
        ...

    }

但是在声明$value字段的行上,我收到错误:

语法错误,意外情况&#39;(&#39;,期待&#39;,&#39;或&#39 ;;&#39;

我不确定为什么会这样。语法显然是正确的。

更新 - Helper_1.php代码:

class Helper_1 {

   public static function getValue() {
       $result = ''; 

       switch (Storage::getDefaultDriver()) {
            case 'local':
                $result= URL::to('/');
                break;

            case 's3':
                $path = Storage::getDriver()->getAdapter()->getClient()->getObjectUrl(env('S3_BUCKET'), '');
                break;
        }

        return $result.'/';
   }

}

2 个答案:

答案 0 :(得分:3)

PHP无法解析初始值设定项中的非平凡表达式。

你可以这样做:

class Helper_2 {
    protected static $value;
}

Helper_2::$value = Helper_1::getValue();

或者这个:

class Helper_2 {
    protected static $value;

    static function init()
    {
        self::$value = Helper_1::getValue();
    }
}

Helper_2::init();

答案 1 :(得分:3)

  

语法显然是正确的。

不是。您不能在类属性定义中使用方法调用,因此以下内容不正确:

protected static $value = Helper_1::getValue();

您只能使用简单的数据类型,如整数,字符串,数组等。