登陆

php 命名空间

问题:为什么已经声明了命名空间,在运行文件时还要再手动导入同一命名空间下相应文件呢?例如:我在同一文件夹下有三个单独的不互相冲突的类文件,三个类文件都声明在同一个命名空间下,但是当我运行类1所对应的文件时,如果用到了类2,则报致命错误:找不到类2

谢谢

# PHP
nefu_wangxunnefu_wangxun33 天前434 次浏览

全部回复(5)我要回复

  • autoload

    autoload2022-04-24 09:31:48

    引入自动加载

    回复
    1
  • nefu_wangxun

    谢谢,这确实是一种解决方式。其实我更想了解的是:既然分散在不同文件中的类已经被定义在相同的命名空间下,为什么还要再引入自动加载呢?同一命名空间下的类不应该是直接相互可见的吗?如果还要引入自动加载,命名空间的意义又在哪呢?

    nefu_wangxun · 2022-04-24 10:05:18
    autoload

    全国比如都设有连锁超市n家,并不代表n家连锁超市数据都共通,你需要设立一家总公司,总公司把所有数据都所有省的数据加载到一块,每次单独一家省内的连锁超市想要访问省内的数据,只需要到总公司相应的省内数据库中即可一览无余

    autoload · 2022-04-25 09:22:12
    nefu_wangxun

    谢谢你的再次回复。确实向你所说的那样。命名空间的意义可能更是为了强调文件的逻辑结构,便于区分和更好的管理文件。就像总公司数据库可以更好的管理多个分公司的数据一样,但是 分公司1 要想知道 分公司2 的数据信息,还是要到总公司里去调用的。这就像同一命名空间下的不同文件相互使用时仍要再导入一样。但此时你可以清晰的知道要到可能很庞大的文件系统中的哪个位置去找你需要的文件,就像你清晰的知道要去你所在的总公司数据库去找你需要的分公司的数据信息一样,因为此时你需要的文件就在你所在的命名空间下,你可以清晰的定位目标文件位置。所以命名空间的意义并不一定在于可以实现同一空间下的文件的直接共享与可见,而且思考过后会发现,如果同一命名空间下的文件如果直接可见的话,则意味着运行一个文件时,可能要自动加载该空间下的所有文件,这很耗费资源而且加载的文件多数用不上。命名空间的意义更在于当你需要一个文件时,得益于这一文件结构,可以帮助你快速导入你要的文件,然后你要根据自己的需要导入个别文件。

    nefu_wangxun · 2022-04-25 21:28:04
    nefu_wangxun

    向你所说 -> 像你所说

    nefu_wangxun · 2022-04-25 21:34:09
  • 取消回复发送