在 PHP 中,“/”和“\”有什么区别?

5

我正在尝试理解PSR-0中的示例,但无法成功。我知道\是目录分隔符(至少在我的Windows操作系统中),但在我看来,它不能等同于/。我搜索了它们之间的区别,但没有找到结果。


1
幸运的是,这不是一个观点问题,所以你的观点并不会改变事情。是的,Windows使用反斜杠“\”,而其他系统使用“/”,是的,PHP在大多数情况下制作文件路径时不需要特殊处理。即使在Windows上,您也可以只使用正常的斜杠。 - Elin
实际上,在整个 PHP 中,“\”和“/”有不同的用途...这完全取决于你正在做什么。 - l'L'l
路径中的反斜杠是来自于 MS-DOS 2.0 的遗产(版本1.0根本没有目录)。它被选择而不是传统的 / 正斜杠,以掩盖其来源。然而,标准的 / 目录分隔符也可以在 DOS/Windows 上使用。 - mario
4个回答

13

在Linux或MacOS下运行时,PHP只允许使用/作为目录分隔符。

在Windows下运行时,PHP接受/\作为目录分隔符;它们被视为完全相同。

几乎所有情况下,最好始终使用/,因为这将使您的代码在任何平台上运行。如果您使用\作为目录分隔符,则您的代码仅适用于Windows。

在Windows上的区别是允许与可能提供带有\分隔符路径的其他软件兼容,但除非您特别需要这样做,否则最好坚持使用/

此外,在PHP中还有另一种使用\的情况可能会使你感到困惑(特别是你提到了PSR0)。\也是PHP命名空间的分隔符。

命名空间不同于目录分隔符,但它们可能看起来像它们,因为通常的做法是组织项目使得命名空间匹配目录结构。这样做可以使您的代码模块易于查找并编写自动加载器,因此这是按照PSR0推荐构建项目的方式,但在PHP语言中并不是强制要求的;命名空间与目录路径不同。


1
反斜杠在字符串中也有特殊含义,例如换行符是\n,在正则表达式中\s表示空格字符。如果要在字面字符串中使用带反斜杠的路径,您需要深入了解PHP如何解释字符串字面量。使用正斜杠可以避免麻烦。 - alexis

3
“反斜杠”一词是计算机中经常被错误使用的术语之一。人们在提到URL时,经常将正斜杠称为反斜杠。Web地址(URL)例如http://foo.bar/dash/,包含正斜杠而不是反斜杠。下面定义了反斜杠和正斜杠之间的区别:
反斜杠:\
正斜杠:/
记住反斜杠和正斜杠的差异的好方法是,反斜杠向后倾斜(\),而正斜杠向前倾斜(/)。
在Windows中,反斜杠用于文件路径中的目录分隔符(例如:C:\Program Files\Common Files\microsoft shared)。在基于Unix系统的操作系统中,用正斜杠实现相同的功能(例如:/System/Library/Screen Savers)。
正斜杠也可以简称为“斜杠”,因为它们比反斜杠更常用。 (斜杠还用作除法符号和代替单词“或”的符号。)因此,URL http://foo.bar/dash 可以口头表达为“foo点bar斜杠dash”。如果您在共享网址时说“反斜杠”,人们将知道您的意思,但是您可能会被认为是新手。因此,最好养成使用正确术语的习惯。

是的,这是一个很好的区分它们的方法。非常感谢您提供的所有信息。由于这个概念让我感到困惑,我将把它添加到“命名空间”中。+1 - Adib Aroui

2
\用于命名空间,而/是Windows文件系统上的路径分隔符,例如:C:/Users/Sam/Documents PSR类加载器允许您使用命名空间中提供的信息从目录中查找和加载类。例如,一个名为response.php的类可以放置在项目根目录下的文件夹samayo/http中,完整路径将是samayo/http/response.php。现在,PSR允许您使用命名空间samayo\http\reponse来使用DIRECTORY_SEPARATOR改变目录分隔符并进行一些后台操作以加载文件。

1

\被用作命名空间的分隔符,/被用作文件的目录分隔符。这个例子基于Unix系统。

虽然在Windows上使用\作为目录分隔符也可以(例如,用于加载文件),但使用/同样有效。但是,如果您想在所有系统上使用正确的目录分隔符,您可以始终使用特定于系统的常量DIRECTORY_SEPARATOR


感谢 DIRECTORY_SEPARATOR 和回答。 - Adib Aroui

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接