【问题标题】:What is "with" used for in PHP?PHP中的“with”是做什么用的?
【发布时间】:2013-11-11 15:51:15
【问题描述】:

我在 eloquent 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 脚本中注册,因此它会在每个页面上加载,即使它不包含任何类。

谢谢大家。不要假设所有东西必须是现代框架中的命名空间类。

【问题讨论】:

  • 你确定不是自定义函数吗?
  • with 不是 PHP 中的保留字。他们只是将一个函数命名为with
  • 我猜这是一种解决方法,类似于new Foo()->newQuery() 在某些版本的 PHP 中不起作用...? ('虽然我认为它适用于 5.2,所以我不确定是什么版本)
  • @Izkata:在 PHP 5.4 中添加了执行 new Foo()->newQuery() 的功能。

标签: php


【解决方案1】:

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

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

这是new ExampleObj()->newQuery() 的更短版本和更易读的版本。 with 函数未在 PHP 中构建。它是 PHP 5.4 之前版本的解决方法。正如@Rocket Hazmat 在 PHP 5.4+ 中指出的那样,您可以只执行 new ExampleObj()->newQuery() 所以这里的 with 函数允许您保持可读的向后兼容性。

【讨论】:

  • 在 PHP 5.4+ 中,您可以使用new ExampleObj()->newQuery(),但不能在旧版本中使用。
  • 是的,没错。我会改变我的答案。
【解决方案2】:

with 函数是 Laravel 提供的一个帮助器 documented here。最好的文档是the code,如您所见,它只是返回对象。在 5.4 / 5.4 中,最好将表达式用括号括起来,以避免不必要的函数调用的开销。

【讨论】:

    【解决方案3】:

    我认为@Izkata 在 cmets 中一针见血。

    [我猜]这是一种解决方法,类似于 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 版本。

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 2011-12-12
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      相关资源
      最近更新 更多