2017-03-08 51 views
-3

我正在学习自动加载。我发现这行代码修剪和str_replace做同样的事情,摆脱反斜杠(在我的未发现)。自动载入功能中的trim和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清理语句总是错误的。你刚才给出的例子就是这里应用的例子。你可以讨论为什么使用DIRECTORY_SEPARATOR是好还是坏,但事实是'/'只能用,因为windows允许你使用错误的目录分隔符(并且PHP将文件函数转换为\)。通过正确使用(使用常量),您是未来证明系统是否确定“(^。^)”是新目录分隔符。 – Luke