2016-12-06 18 views
1

インターネットのどこかでこれを見ました。私はそれを試してみましたが、それは動作します。それは、関数の逐次実行を可能にすることになっています。このPHP表記とは何ですか?

Chmod('file', 0777).chroot('file','root').redirect('/') ; 

「。」を追加すると、私の関数呼び出しの後、すぐに別の関数を実行することができます。私はインターネット全体を検索しましたが、問題は何が呼び出されているのかわからないので、ここで質問しました。私はその完全な文書を読んでいます。

+1

"メソッドチェーン" – tkausl

+0

jqueryでは "メソッドチェーン"と呼ばれています – SuperDJ

+0

実際には有効なPHPであり、メソッドチェーニングではありません。 – Narf

答えて

2

これは「表記法」ではなく、連結演算子(ドット)の奇妙な利用です。

基本的にPHPのtype-jugglingを利用し、各関数の戻り値を文字列に変換します。

chmod()およびchown()は、空の文字列に暗黙的にキャストされたブール値を返します。
redirect()はおそらくフレームワークによって提供される関数であり、おそらくvoid(つまりnoting)を返します。これは再び空の文字列にキャストされます。

配列を返す関数、またはstringにキャストできない唯一の値の型である__toString() magic methodを実装していないオブジェクトでは機能しません。

$value = Chmod('file', 0777).chroot('file','root').redirect('/') ; 

...唯一のあなたが実際にあなたが役に立たない空の文字列になります知っている程度$valueを、気にしない:

以下は、より多くの意味を行います。

私はあなたが「素敵」だと思っていて、私の説明を考えれば、おそらくそれも「スマート」だと思うでしょうが、それは技術的に間違っています。

ドットをセミコロンに置き換えることは、「正しい方法」になります。それは、他の言語のメソッド連鎖としてドットを読み込むことに慣れているため、セミコロンとは対照的に読みやすくなりました。

だから誰かが "醜い"と呼んでも驚かないでください。あなたはそれをやるべきではなく、技術的に "ハック"です。

+0

ありがとう、私は今日何か新しいことを学んだ。私はそれを使用しないことを約束することはできません。それは非常に便利です:) –

+0

本当にあなたを責めることはできません。おそらく存在しない変数にデフォルトを割り当てるために私は同様のことをします: 'isset($ foo)|| $ foo = 'bar'; ' – Narf

0

これはPHPで行うことはできません。ドット.は、言語の中の1つだけを意味し、それは文字列の連結です。

同様の方法チェインを行うことができます。これは、クラス内のfinalでない(実際の結果を返すか、最終的なアクションを行う)メソッドから$thisを返すことで実現されます。

関連する問題