我在雄辩的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脚本中注册,因此它会在每个页面上加载,即使它不包含任何类。
谢谢大家。在现代框架中,必须一个命名空间类是不值得的。
答案 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版本中使用。