6

雄弁なORMライブラリで次の行に出くわしました:

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

以前に使用された「with」を見たことがなく、PHP ドキュメントで見つけることができません。ほとんどの検索では "with" がストップ ワードになっていると思います。

何年にもわたって PHP をプログラミングしてきましたが、"with" に遭遇したことは一度もありませんでした。それは何をするためのものか?私は、ORM に関して、「with」が PHP-5.4 では不要になったと述べたコメントを 1 つ見つけましたが、それは言われたとおりでした。それが正確であれば、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;
    }
}

いくつかの回答で述べたように。このグローバル スコープ関数により、1 つのステートメントでオブジェクトを作成し、t でメソッドを実行できます。Laravel のインストール時に composer autoload_files.php スクリプトに (どういうわけか) 登録されるため、クラスが含まれていなくても、すべてのページに読み込まれます。

皆さんありがとう。最新のフレームワークでは、すべてが名前空間付きのクラスである必要があると想定しない方が賢明です。

4

3 に答える 3

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バージョンでも動作することができます。

于 2013-11-11T16:00:46.827 に答える
3

この関数は、こちらに記載withされているように、Laravel が提供するヘルパーです。最良のドキュメントはコードであり、ご覧のとおり、単純にオブジェクトを返します。5.4 / 5.4 では、不要な関数呼び出しのオーバーヘッドを避けるために、式を括弧で囲むだけの方がよいでしょう。

于 2013-11-11T15:59:57.973 に答える