【问题标题】:Calling a custom helper method in another helper throws syntax error在另一个助手中调用自定义助手方法会引发语法错误
【发布时间】:2015-05-19 09:28:33
【问题描述】:

我的项目根目录中有一个 helpers 文件夹(因此,在 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 字段的那一行,我得到一个错误:

语法错误,意外的 '(',期待 ',' 或 ';'

我不确定为什么会发生这种情况。语法显然是正确的。

更新 - 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.'/';
   }

}

【问题讨论】:

  • 如果有帮助,您可以接受更多读者的答案:)

标签: php laravel laravel-5


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    语法显然是正确的。

    不是。你不能在类属性定义中使用方法调用,所以下面是不正确的:

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

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

    【讨论】:

    • 一个人总是在学习。但我必须说,我不会将抛出的错误称为信息丰富的错误。
    • @lesssugar 不,但错误消息非常直白:我猜解析器不够智能,无法说:“看起来用户在这里尝试使用函数/方法调用,我最好告诉他们,而不是说我只是找到了一个随机括号。”
    猜你喜欢
    • 2018-08-10
    • 2016-09-02
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    相关资源
    最近更新 更多