【发布时间】:2017-02-07 03:03:49
【问题描述】:
这个问题与所考虑的问题不同。这个问题 意思是 PHP 匿名函数的奇怪结果。关于 这里的 Yii 只是为了显示匿名的上下文 功能已涉及。
我决定在 Yii2 应用程序中使用 PHP 匿名函数来格式化 DetailView Widget 中的属性值,如下所示:
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'DatabaseID',
'Prod:ntext',
'desc:ntext',
[
'label' => Yii::t('app','review'),
'value' => function(){return 'hi';}, //Just for simplification the issue explanation. However, it is the actual code that generates the error.
],
],
]) ?>
我收到以下错误,表明匿名函数没有返回字符串:
htmlspecialchars() 期望参数 1 是字符串,给定对象
我想知道,为什么匿名函数返回一个对象?如代码示例所示,它应该只返回一个简单的字符串hi!
我已阅读有关 Anonymous functions 的 PHP 文档,但我无法找到有关此问题的任何信息。
【问题讨论】:
-
类似问题.......stackoverflow.com/questions/27787242/…
-
这是在
DetailView小部件中设置值的错误方式。您将函数传递给value,但它永远不会执行(与GridView不同,call_user_func永远不会被调用)。结果,您有此错误。你可以用call_user_func包装它,但这没有意义。正确的做法是直接调用$model的方法或者一些辅助组件。这是使用匿名函数的错误方式。相关问题请仔细阅读my answer。 -
@arogachev 好的,这可能不是正确或合适的方式,但在某些情况下它应该是更快的方式。另外,这个问题主要针对匿名函数的概念,当我认为它应该在没有
call_user_func的情况下运行时,我实现它是错误的。所以这不是一个重复的问题。