【问题标题】:what is the difference between `/` and `\` in phpphp中的`/`和`\`有什么区别
【发布时间】:2015-08-16 13:46:24
【问题描述】:

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

【问题讨论】:

  • 幸运的是,这不是意见问题,因此您的意见不会改变事情。是的,Windows 使用反斜杠“\”,而其他系统使用“/”,是的,PHP 在创建文件路径时大部分时间不需要特殊处理。即使在 Windows 上,您也可以使用普通的正斜杠。
  • 实际上,“\”和“/”在 PHP 中的用途不同……这完全取决于你在做什么。
  • 路径中的反斜杠是 MS-DOS 2.0 的遗产(1.0 版根本没有目录)。它被选择而不是传统的/ 正斜杠来混淆这个想法的来源。然而,从那时起,标准的/ 目录分隔符也适用于 DOS/Windows。

标签: php


【解决方案1】:

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

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

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

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

另外,\ 在 PHP 中还有另一种用法,可能会让您感到困惑(尤其是您提到的 PSR0)。 \ 也是 PHP namespaces 的分隔符。

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

【讨论】:

  • 反斜杠在字符串中也有特殊含义,例如换行符是\n,在正则表达式中,例如\s 是一个空白字符。要在文字字符串中使用带有反斜杠的路径,您需要很好地理解 PHP 如何解释字符串文字。使用正斜杠可以省去您的麻烦。
【解决方案2】:

术语“反斜杠”是计算中使用最不正确的术语之一。人们通常将正斜杠称为反斜杠,尤其是在提及 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 dot bar slash dash”。如果您在共享 URL 时说“反斜杠”,人们会明白您的意思,但您可能会被视为菜鸟。因此,最好养成使用正确术语的习惯。

【讨论】:

  • 是区分它们的好方法。谢谢你提供的所有信息。我将其添加到 namespace 概念中,因为它让我感到困惑 +1
【解决方案3】:

\ 用于namespacing/ 是Windows 文件系统上的路径分隔符,例如C:/Users/Sam/Documents

PSR 类加载器允许您使用您在命名空间中提供的信息从目录中查找和加载类。

例如,可以将名为response.php 的类放在项目根目录下的文件夹samayo/http 中,现在完整路径将是samayo/http/response.php,PSR 允许您使用命名空间samayo\http\reponse 来加载使用DIRECTORY_SEPARATOR 的文件,通过更改目录分隔符和更多幕后操作

【讨论】:

    【解决方案4】:

    \ 用作命名空间的分隔符,/ 用作文件的目录分隔符。该示例基于 unix 系统。

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

    【讨论】:

    • 感谢DIRECTORY_SEPARATOR 和回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 2018-11-18
    • 1970-01-01
    • 2016-03-20
    • 2012-03-08
    • 2011-03-10
    • 2022-12-13
    相关资源
    最近更新 更多