V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KiseXu
V2EX  ›  PHP

为什么要忘记$GLOBALS呢

  •  
  •   KiseXu · 2012-10-03 16:51:44 +08:00 · 3994 次点击
    这是一个创建于 4452 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有人建议我不要使用$GLOBALS,为什么呢。此外有什么替代的解决方案吗
    8 条回复    1970-01-01 08:00:00 +08:00
    zooandzoo
        1
    zooandzoo  
       2012-10-03 18:51:04 +08:00
    在面向对象里,是比较忌讳用$GLOBALS的,因为它破坏封装,它是全局可修改的,这会影响其他使用$GLOBALS功能模块。可以用设计模式来取代,如注册和工厂。在面向过程里用用无所谓了比较方便
    frittle
        2
    frittle  
       2012-10-03 19:11:25 +08:00
    非OO的话可以用$GLOBALS,OO的话可以靠singleton解决。

    http://www.talkphp.com/advanced-php-programming/1304-how-use-singleton-design-pattern.html
    gaocheng
        3
    gaocheng  
       2012-10-03 20:03:56 +08:00
    PHP没有被必要搞得这么复杂,简简单单快速开发就好啦,大家遵循好团队规范就好了
    arzusyume
        4
    arzusyume  
       2012-10-03 22:51:08 +08:00
    看看discuz的$_G,怎么都高兴不起来吧
    tonyseek
        5
    tonyseek  
       2012-10-05 22:35:13 +08:00
    全局的问题在于反模块化、反命名空间,可参考 JavaScript 为什么要引入 CommonJS 等。
    tonyseek
        6
    tonyseek  
       2012-10-05 22:41:52 +08:00
    说错,不是 CommonJS 是 Modules/AMD
    picasso250
        7
    picasso250  
       2012-10-17 17:22:19 +08:00
    我的方法是OO和过程结合。M部分用OO,模块化的也用OO,就是 router 直接写在 index.php 里面。没有用到任何 $GLOBALS 和 global 关键字。其实我觉得如果 Singleton 一个 App 类,再 run 之,有点脱了裤子放屁的感觉……
    walleve
        8
    walleve  
       2012-10-17 17:42:04 +08:00
    别被规则约束死.. 依据你现在的理解, 你可以用..用得好就好. 等回头你再发现问题需要重构的时候, 是否修改,到时候也是你说了算. 全局没错, 错的是别陷入在模块化和oo里边.. 还有人反oo呢..
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1111 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:32 · PVG 07:32 · LAX 15:32 · JFK 18:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.