2017-03-08 3 views
-3

私はオートローディングについて勉強しています。私はtrimとstr_replaceがbackslashを取り除いているのと同じことをするこの行のコードを見つけました。オートロード機能のトリムとstr_replaceは何をしますか?

しかし、私はなぜこれを行う必要があるのか​​分かりません。

誰かが説明できますか?

$class = 'One\Ting\ming'; 

strtolower(str_replace("\\", DIRECTORY_SEPARATOR, trim($class, "\\"))).".php"; 
+2

'trim'は、開始と終了の文字だけを削除します。 'str_replace'は、文字列中のすべての出現箇所を置き換えます。 – bansi

+1

通常、これらのものは[マニュアル](http://php.net/docs.php) – RiggsFolly

+0

@bansiのように見えますが、バックスラッシュを削除することは何時ですか?私は上記$クラスの文字列が削除されているとは思わない。彼らはまだ同じ文字列をエコーし​​ますが、str_replaceとtrimが発生した後に小文字になります。 –

答えて

0

trimは、文字列の先頭にバックスラッシュを削除します。
str_replaceは、他のすべてのバックスラッシュを定数DIRECTORY_SEPARATORに置き換えます。

あなたのDIRECTORY SEPARATOR/です。

$class = '\One\Ting\ming'; \\ notice that I have added a leading backslash 

strtolower(str_replace("\\", DIRECTORY_SEPARATOR, trim($class, "\\"))).".php"; 

リーディングバックスラッシュをトリミングした後、次に/\のすべてのオカレンスを変更

strtolower(str_replace("\\", DIRECTORY_SEPARATOR, "One\Ting\ming")).".php"; 

が、それはすべて小文字に文字列を変更し、付加、最後

strtolower("One/Ting/ming").".php"; 

となりなりますファイル拡張子:

"one/ting/ming.php"; 
+0

あなたの説明は有効ですが、コード部分は全く不自由です。ディレクトリセパレータには常に '/'を使う方が良い(すべてのプラットフォームで動作する)。 '$ class =" \ One \ ting \ ming "; \\ – bansi

+0

@bansiの場合、何が起こるか考えてください。掃引文は常にfalseです。ここで入力した例がここに適用されます。なぜDIRECTORY_SEPARATORを使うのが良いか悪いのかについて議論することができますが、実際には '/'は正しく動作しません。なぜなら、窓は間違ったディレクトリ区切り文字を使うことができるからです。定数を使って正しく行うことで、システムが '(^。^)'が新しいディレクトリ区切り文字であると判断されたかどうかの将来の証明となります。 – Luke

関連する問題