msgbartop
PHP语言, PHP扩展, Zend引擎相关的研究,技术,新闻分享 – 左手代码 右手诗
msgbarbottom

12 Oct 10 PHP的命名空间的实现

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”, 就可以实现自己的命名空间.


分享到:



Related Posts:

Tags: , , ,

19 Responses to “PHP的命名空间的实现”

  1. xiaochen |

    鸟哥,我用yaf命名空间后,怎么给controller定义啊,我现在在多模块下进行开发,完后想定义一个基类controller,但是一直提示找不到

  2. Anonymous |

    你好,controller里怎么加命令空间啊,一加就报错,要做api呢,controller之间需要继承的,

  3. グアム シャネル時計 中古 |

    おすすめ人気ブランド腕時計, 最高等級時計大量入荷!
    ◆N品質シリアル付きも有り 付属品完備!
    ☆★☆━━━━━━━━━━━━━━━━━━━☆★☆
    以上 宜しくお願い致します。(^0^)
    広大な客を歓迎して買います!── (*^-^*)
    グアム シャネル時計 中古 http://www.buyma.cc/repurika-2960.html

  4. PHP命名空间的创建和使用 | Parker's Blog |

    [...] 声明了命名空间的结果,就是Car的实际名字变成了MyspaceCar(当然,你不能直接这么声明)。 [...]

  5. tonbochow |

    开启命名空间new Yaf\Route_Rewrite 提示找不到

  6. Laruence |

    你给个测试用例?

  7. 哇那个 |

    鸟哥,在php7下使用命名空间,会显示exception找不到,咋整?

  8. Parker's Blog |

    [...] 声明了命名空间的结果,就是Car的实际名字变成了MyspaceCar(当然,你不能直接这么声明)。 [...]

  9. Parker's Weblog |

    [...] 声明了命名空间的结果,就是Car的实际名字变成了MyspaceCar(当然,你不能直接这么声明)。 [...]

  10. Parker Chan |

    [...] 声明了命名空间的结果,就是Car的实际名字变成了MyspaceCar(当然,你不能直接这么声明)。 [...]

  11. PHP命名空间的创建和使用 | Parker weblog |

    [...] 声明了命名空间的结果,就是Car的实际名字变成了MyspaceCar(当然,你不能直接这么声明)。 [...]

  12. PHP命名空间的创建和使用 | Hong's Blog |

    [...] 声明了命名空间的结果,就是Car的实际名字变成了MyspaceCar(当然,你不能直接这么声明)。当一个外部文件include example1.php的时候,无法直接new Car,因为Car只存在于Myspace这个空间,正确地创建实例的做法是new MyspaceCar。 [...]

  13. 悠悠猴 |

    由于目前的项目中出现了多个同名的类. 为了避免冲突想采用PHP的命名空间. 但是看了下PHP的命名空间感觉有点失望.没有C#的好用. 比如给某个类设置了命名空间.那么得去修改所有调用了该类的文件. 如果这样的话感觉可以不用了命名空间了,直接修改重复的类名就可以了. 在C#中则只要保证不导入多个同名类就可以不去修改代码. 如果导入了多个同名类, 只需要在调用的时候指定使用哪一个命名空间中的类即可.这样才是最方便的. PHP要是也这样该多好啊.

  14. Thinking In LAMP Blog » Blog Archive » PHP每月通讯(2010年11月) |

    [...] http://www.laruence.com/2010/10/12/1763.html PHP的命名空间的实现 [...]

  15. bduss |

    这个feature一直是很期待的,没想到最后搞出来这么挫……好难看

  16. 李惟 |

    受用了。

  17. Amaranth |

    鸟哥,用php块两年了,你的文章基本上看不懂,
    大概知道意思,咋整 -_-b

  18. 雪候鸟 |

    @lotte 右上角有我的通用联系方式. :)

  19. lotte |

    一直看你的博客,真是好强啊。能加你好友跟你学习学习吗

Leave a Reply

*