PHP中使用的“with”是什么?

时间:2013-11-11 15:51:16

标签: php

我在雄辩的ORM库中遇到过这一行:

return with(new static)->newQuery();

我以前从未见过“with”,并且在PHP文档中找不到它。我猜测“with”在大多数搜索中都是一个停止词,所以我甚至都没有接近。

在PHP编程的多年中从未遇到过“with”,我觉得我错过了。它有什么作用?我确实遇到过一条关于ORM的评论,提到PHP-5.4中不再需要“with”,但这就像说的那样多。如果这是准确的,那么最好知道PHP-5.4的等价物。

更新:支持答案的详细信息: -

我在Laravel的Immuminate / Support / helpers.php助手脚本中找到了这个辅助函数:

if ( ! function_exists('with'))
{
    /**
     * Return the given object. Useful for chaining.
     *
     * @param  mixed  $object
     * @return mixed
     */
    function with($object)
    {
        return $object;
    }
}

正如一些答案所述。该全局范围函数允许在一个语句中创建对象并在t中运行方法。安装Laravel时,它(以某种方式)在composer autoload_files.php脚本中注册,因此它会在每个页面上加载,即使它不包含任何类。

谢谢大家。在现代框架中,必须一个命名空间类是不值得的。

3 个答案:

答案 0 :(得分:8)

这是一个看起来像这样的函数:

function with($obj) { 
    return $obj; 
}

它是new ExampleObj()->newQuery()的更短版本和更易阅读的版本。 with函数不是用PHP构建的。这是PHP版本以后的旧版本的解决方法。正如@Rocket Hazmat在PHP 5.4+中所指出的,你可以只做new ExampleObj()->newQuery()所以with函数允许你保持可读的向后兼容性。

答案 1 :(得分:3)

with函数是Laravel提供的帮助器documented here。最好的文档是the code,正如您所看到的,它只返回对象。在5.4 / 5.4中,最好只围绕parens中的表达式,以避免不必要的函数调用的开销。

答案 2 :(得分:3)

我认为@Izkata在评论中点头。

  

[我猜]这是new Foo()->newQuery()在某些版本的PHP中无法正常工作的解决方法

在PHP 5.4中添加了以下内容:

  

已添加实例化的类成员访问权限,例如(new Foo)->bar()

(来源:http://www.php.net/manual/en/migration54.new-features.php

所以,我认为with看起来像这样:

function with($x){
    return $x;
}

在PHP 5.4及更高版本中,您可以执行(new static)->newQuery(),但对于旧版本,则不能。 with可能就在那里,所以你可以做with(new static)->newQuery(),它可以在任何PHP版本中使用。