質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

クロージャ

クロージャは、プログラミング言語における関数オブジェクトの一種です。 引数以外の変数を実行時の環境ではなく、 自身が定義された環境において解決することを特徴とします。

Q&A

解決済

1回答

248閲覧

staticなクロージャの有用性について

surface_0

総合スコア497

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

クロージャ

クロージャは、プログラミング言語における関数オブジェクトの一種です。 引数以外の変数を実行時の環境ではなく、 自身が定義された環境において解決することを特徴とします。

0グッド

1クリップ

投稿2024/02/02 04:51

PHPにおけるクロージャはstatic function()static fn()といったstaticキーワードを付ける事ができますが、そのstaticの有用性について教えてください。

PHPのリファレンスを見ると下記のように書かれていますが、自分には$thisが使えるか否か程度にしか思えず、staticで制限することによるメリットが思いつきません。
他にどういった差があるのでしょうか。

https://www.php.net/manual/ja/functions.anonymous.php#functions.anonymous-functions.static

static を付けて無名関数を宣言することができます。 こうすることで、現在のクラスが無名関数を自動的にバインドすることがなくなります。 オブジェクトも、実行時にはバインドされなくなります。

また、自分が携わっているプロジェクトの既存コードの例に従って、割と考えなしにパフォーマンスの点で有利なのかなと思って、あらゆるクロージャにstaticを付けているのですが、基本的に付けるのが得策なのでしょうか?
ちなみにほぼすべて下記のような使い捨てのクロージャしか存在しません。

php

1$result = array_map(static fn(int $item) => $item * 10, $arr);

可能であればstaticを付けるべきケース、そうでないケースについてそれぞれ例を挙げていただけると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

現代ではstatic付けることはないので忘れていい。
大昔のPHP界隈ではstatic付けた方が速いとか参照渡しが速いとか根拠のない迷信が信じられていた。
それ以前にクロージャ自体が新しくて使えてない人が多かった。
信じられないだろうけど今でもPHP5.3までの知識で止まってる人は多い。

昔はメリットが多少あったとしてもPHP自体のバージョンアップでもう全く意味のない行為。

投稿2024/02/02 05:52

pcs

総合スコア357

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

surface_0

2024/02/09 09:26

回答ありがとうございます。 特に反論意見も出てこなかったようなので、おっしゃるとおりなのでしょうね。 これからはわざわざ付けるのはやめるようにしたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問