【问题标题】:Laravel: Cannot use helper inside php shorthand array [duplicate]Laravel:不能在php速记数组中使用帮助器[重复]
【发布时间】:2016-04-05 21:46:36
【问题描述】:

PHP 版本 5.6。代码:

protected $siteServices = [
        1 => [
            'title' =>  'Consulting',
            'key'       =>  'service',
            'description'   =>  '',
            'file'  =>  asset('assets/img/sample/image1.jpg'), // throws error on this line
        ],
];

错误:PHP Parse error: syntax error, unexpected '(', expecting ']'

对此有什么可能的解决方法?

编辑 通过在运行函数中移动变量而不是使其成为protected 来解决。也可以通过先声明空变量然后设置__constructor()中的值来解决

【问题讨论】:

  • 我相信这不是重复的。
  • 另一个问题涉及将数据传递给对象,而该问题的 OP 试图在面向对象的上下文中调用数组内的函数。
  • 嗯,都是一样的。如果需要初始化这个数组,可以在构造函数中进行。
  • 但这很丑@RoyalBg
  • @HassanAlthaf 为什么丑?这只是调用您建议的setSiteService 方法的构造函数

标签: php arrays laravel-5


【解决方案1】:

可以做到,但方式不同。我列出了两种不同的方法。

第一种方法

protected $siteServices = [
    1 => [
        'title' =>  'Consulting',
        'key'       =>  'service',
        'description'   =>  '',
        'file'  =>  ['asset', 'assets/img/sample/image1.jpg'] // throws error on this line
    ]
];

我用分配给该数组中文件键的数组替换了函数调用。所以,现在,您会想知道如何调用资产函数,是吗?这很简单。

当您循环遍历该数组时,您可以这样做:

call_user_func($siteServices[1]['file'][0], $siteServices[1]['file'][1]);

那么,我们在这里做什么?

首先,我们将一个数组设置为文件键,其中数组的第一个元素是函数的名称,而另一个元素是需要传递给之前定义的函数的参数的值。

因此,使用 PHP 的 call_user_func 函数,您可以调用函数并给出它们的名称和参数。希望对您有所帮助。


第二种方法

我很确定您将为此属性设置一个 setter 函数。因此,您可以这样做:

public function setSiteService($title, $key, $description, $file)
{
    $file = asset($file);

    $service = [
        'title' => $title,
        'key' => $key,
        'description' => $description,
        'file' => $file
    ];

    $this->siteServices[] = $service;
}

所以,setter 会为您完成处理部分。硬编码数组根本不是一个好主意,您绝对应该通过某种机制来填充。

【讨论】:

  • 这仅在他稍后手动处理数组时才有效,如果它是通过某种约定处理它的框架的一部分,则无效
  • 嗯,这是最好的。否则,我还有别的办法。
  • 但是问题没有意义,你可以调用一个函数作为一个值,它的结果就是这个值
  • @RoyalBg 嗯,它是 PHP。你不能指望它里面的所有东西都能正常工作。我为他尝试了不同的模型功能,但我失败了。我认为 call_user_func 是一个很好的选择,或者我刚刚放的那个。检查第二种方法。
  • 您应该期望它能够工作,好吧,人们依赖 PHP 来完成实际项目。是的,第二种方式更好。然而我们需要找到问题出在哪里,它肯定不是来自那个函数调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 2010-09-17
  • 1970-01-01
  • 2017-03-01
  • 2017-08-10
  • 1970-01-01
相关资源
最近更新 更多