PHP 怎样全局引入名称空间

2018-06-12 15:15:55 +08:00
 cc959798

比如有个类 Obj,每个 PHP 文件我都需要 use xxxx\xxx\Obj,怎样在项目的入口文件引入然后不需要在其他文件里再引入了

2830 次点击
所在节点    PHP
17 条回复
zilan
2018-06-12 15:44:24 +08:00
我觉得可以考虑在入口之类的文件做,但这样的结果可能造成代码不干净,或者造成不必要的加载
但换个角度来,如果每个项目都需要这个类,是不是可以回头反思这个类的设计是不是有问题。
或者分析能否以其他的方式如 trait 来实现
NEETLEE
2018-06-12 15:51:29 +08:00
在项目根目录的 index.php 引入就可以了
wangysong
2018-06-12 15:52:22 +08:00
你不需要全局引入命名空间啊。

你只要把这个类做成不再命名空间中就可以了。

require_once("Class.php");

以后就可以直接使用了呀。


不准守 psr 规则就好了。.................................
yongjing
2018-06-12 16:16:48 +08:00
嫌麻烦之前不如先思考一下为什么这样设计?
好不容易出个 psr 规范,能遵守尽量遵守
caola
2018-06-12 16:24:20 +08:00
如果是 laravel 直接在 Controller.php 里 use 后,
其他继承 Controller 的,都可以通过 $this 来使用
OMGZui
2018-06-12 16:30:30 +08:00
兄 dei,你的需求很有趣啊
holystrike
2018-06-12 16:32:05 +08:00
命名空间的一个作用是为了防止名称冲突
如果自己规避命名冲突可以用别名
class_alias
torbrowserbridge
2018-06-12 16:32:10 +08:00
@caola use 和 $this 有啥关系?
torbrowserbridge
2018-06-12 16:32:36 +08:00
@holystrike 使用别名一样要在每个文件中 use
holystrike
2018-06-12 16:33:12 +08:00
class_alias('xxxx\xxx\Obj', 'Obj')
holystrike
2018-06-12 16:33:34 +08:00
@torbrowserbridge 至少没那么长
holystrike
2018-06-12 16:34:21 +08:00
@torbrowserbridge 用\就可以了
mcfog
2018-06-12 16:36:07 +08:00
你需要一个合格的 ide
caola
2018-06-12 16:43:47 +08:00
@torbrowserbridge $this 就不用重复写一大长串路径。。。
czlvjin
2018-06-13 00:32:10 +08:00
参考 Laravel 的 helpers,在项目 composer.json 配置一个 files 类型的 autoload
https://getcomposer.org/doc/04-schema.md#files
johnnie502
2018-06-13 02:53:17 +08:00
PHP 又来招黑了,从 JAVA 转过来写 PHP 一段时间,看到不带 namespace 的文件比如 laravel migration 就觉得浑身难受
han8gui
2018-06-13 18:05:10 +08:00
1. 建议:放在一个基类,继承一个基类,比如 MY_Controller.php
2. 感觉你的方案可能就有问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/462485

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX