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

PHP 的变量类如何使用 namespace ?

  •  
  •   hoythan · 2017-07-05 16:04:23 +08:00 · 2678 次点击
    这是一个创建于 2690 天前的主题,其中的信息可能已经有所发展或是发生改变。
    class test{
    	public function run()
        {
        	echo 'success';
        }
    }
    
    $class = 'test';
    
    new $class();
    

    这样是可以

    namespace v2ex
    class test{
    	public function run()
        {
        	echo 'success';
        }
    }
    
    $class = 'v2ex\test';
    new $class();
    

    这样是不可以

    怎么办

    11 条回复    2017-07-05 17:38:04 +08:00
    holyghost
        1
    holyghost  
       2017-07-05 16:25:24 +08:00   ❤️ 1
    奇怪,我这是可以的

    gouchaoer
        2
    gouchaoer  
       2017-07-05 16:27:14 +08:00
    不要去用没有定义的行为
    liuhaotian
        3
    liuhaotian  
       2017-07-05 16:28:32 +08:00
    namespace V2EX 后面漏了一个分号
    wkan
        4
    wkan  
       2017-07-05 16:33:05 +08:00
    可能是 namespace V2EX 后面少个分号 :doge:
    hoythan
        5
    hoythan  
    OP
       2017-07-05 16:53:03 +08:00
    @liuhaotian
    @wkan
    分号在的,我是用了 composer 的自加载,然后在头部定义了
    use xxx\v2ex;

    然后在代码中如果使用

    $class = 'v2ex\\test';
    new $class();

    就会报错。Uncaught Error: Class,前面加 \\也试过不可以

    如果我直接写

    new v2ex\text();

    可以执行。
    johnlui
        6
    johnlui  
       2017-07-05 17:00:49 +08:00   ❤️ 1
    看完这个以后就不会再问了:《 PHP 命名空间 解惑》 https://lvwenhan.com/php/401.html
    hoythan
        7
    hoythan  
    OP
       2017-07-05 17:02:35 +08:00
    @johnlui 如果是说 \ 的话 确实不是这个问题,加不加都一样报错
    hoythan
        8
    hoythan  
    OP
       2017-07-05 17:03:16 +08:00
    @johnlui 或者你的意思是 use xxx\v2ex; 不写
    直接改成
    new \xxx\v2ex\test();
    ?
    hoythan
        9
    hoythan  
    OP
       2017-07-05 17:04:17 +08:00
    @johnlui 果然,不用 use 直接写才行。
    hoythan
        10
    hoythan  
    OP
       2017-07-05 17:09:32 +08:00
    @johnlui 看不懂原理
    qiyon
        11
    qiyon  
       2017-07-05 17:38:04 +08:00   ❤️ 1
    可以试试:
    ```
    $class_name = \v2ex\test::class;
    $obj = new $class_name();
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1105 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:19 · PVG 07:19 · LAX 15:19 · JFK 18:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.