- 本文地址: https://www.laruence.com/2010/10/12/1763.html
- 转载请注明出处
PHP的命名空间, 实现的还真是简单.
当你有如下代码:
<?php namespace Yaf; class Application { }
其实就相当于, 你声明了一个名字为A\B的类, 当然, 你不能直接这么申明(只是不能在PHP脚本中这么申明).
而在使用过程中, 根据PHP手册中命名空间一节所述, 执行时刻, 无论你是使用use, 还是直接写相对名字, 绝对名字, 最后去class表查询的时候, 都是被转换成了最终的类似上面的类名.
比如:
<?php use Yaf as A; $a = new A\Application(); //转换为了Yaf\Application
不能不说, PHP的这种命名空间解决方案 ,是代价最小, 影响最小的解决方案.
对于扩展开发者来说, 这种影响更是微小, 你只需要在INIT_CLASS_ENTRY的时刻, 把原来的形如"Yaf_Application"变为"Yaf\\Application", 就可以实现自己的命名空间.
I have been looking for this information for a long time, thank you very much, the information in this article has helped me a lot in my work. In your spare time, do you often play games to relieve stress?
鸟哥,我用yaf命名空间后,怎么给controller定义啊,我现在在多模块下进行开发,完后想定义一个基类controller,但是一直提示找不到
你好,controller里怎么加命令空间啊,一加就报错,要做api呢,controller之间需要继承的,
おすすめ人気ブランド腕時計, 最高等級時計大量入荷!
◆N品質シリアル付きも有り 付属品完備!
☆★☆━━━━━━━━━━━━━━━━━━━☆★☆
以上 宜しくお願い致します。(^0^)
広大な客を歓迎して買います!── (*^-^*)
グアム シャネル時計 中古 http://www.buyma.cc/repurika-2960.html
[…] 声明了命名空间的结果,就是Car的实际名字变成了MyspaceCar(当然,你不能直接这么声明)。 […]
开启命名空间new Yaf\Route_Rewrite 提示找不到
鸟哥,在php7下使用命名空间,会显示exception找不到,咋整?
你给个测试用例?
[…] 声明了命名空间的结果,就是Car的实际名字变成了MyspaceCar(当然,你不能直接这么声明)。 […]
[…] 声明了命名空间的结果,就是Car的实际名字变成了MyspaceCar(当然,你不能直接这么声明)。 […]
[…] 声明了命名空间的结果,就是Car的实际名字变成了MyspaceCar(当然,你不能直接这么声明)。 […]
[…] 声明了命名空间的结果,就是Car的实际名字变成了MyspaceCar(当然,你不能直接这么声明)。 […]
[…] 声明了命名空间的结果,就是Car的实际名字变成了MyspaceCar(当然,你不能直接这么声明)。当一个外部文件include example1.php的时候,无法直接new Car,因为Car只存在于Myspace这个空间,正确地创建实例的做法是new MyspaceCar。 […]
由于目前的项目中出现了多个同名的类. 为了避免冲突想采用PHP的命名空间. 但是看了下PHP的命名空间感觉有点失望.没有C#的好用. 比如给某个类设置了命名空间.那么得去修改所有调用了该类的文件. 如果这样的话感觉可以不用了命名空间了,直接修改重复的类名就可以了. 在C#中则只要保证不导入多个同名类就可以不去修改代码. 如果导入了多个同名类, 只需要在调用的时候指定使用哪一个命名空间中的类即可.这样才是最方便的. PHP要是也这样该多好啊.
[…] http://www.laruence.com/2010/10/12/1763.html PHP的命名空间的实现 […]
这个feature一直是很期待的,没想到最后搞出来这么挫……好难看
受用了。
鸟哥,用php块两年了,你的文章基本上看不懂,
大概知道意思,咋整 -_-b
@lotte 右上角有我的通用联系方式. 🙂
一直看你的博客,真是好强啊。能加你好友跟你学习学习吗