本帖最后由 zhuzhaodan 于 2014-01-17 22:25:13 编辑

解决方案 »

  1.   


    按照php规则,没找到的类名称 Storeage 会作为参数传到 autoload里面,他没找到的是Storeage类,而不是Think\Storeage类,他为什么乱加
      

  2.   

    他没有乱加,而是你理解错了
    autoload 你总是要告诉他到哪里去找需要的类的
      

  3.   


    在换个说法,php运行到storeage这里时,发现没有这个类,然后他求助autoload()方法,他告诉autoload方法,我没找到Storeage类,php唯一能提供给autoload的线索就是Storeage这个关键字,但是现在是,php太牛逼了,我自己无私的花自己的钱雇了私人侦探,我再额外给你提供一条消息,他在think\里面,php怎么知道他一定在think\里面?这是怎么回事?
      

  4.   


    但是我没告诉autoload去think\里面找这个类啊,他怎么不去Home\空间去找啊
      

  5.   

    那你就看看 Think\Think::autoload 里面是如何写的
      

  6.   

    命名空间本来就是类名的延续,在php代码里使用了命名空间的类的类名都有命名空间前缀~
    这是php5.4后加的语法特性决定的。否则像以下两个类如何识别?
    \namespace1\classA
    \namespace2\classA楼主说的明明使用的是Storeage类,autoloader里却传入了\Think\Storeage这个得看你的写法啦
    如果你的当前php脚本里开头写了user \Think;  那么所有标明命名空间(就是没用‘\’做前缀)的类都会被认为是 \Think 这个命名空间的,so……   
    我没用过楼主代码里的那个框架,但是如果楼主希望加载Storeage 而不是\Think\Storeage 那就应该写 new \Storeage 
      

  7.   

    哦  说错了 是5.3  囧了个囧~  没法修正…………哦  说错了 是php5.3带来的语法  囧了个囧~  没法修正…………
      

  8.   

    命名空间本来就是类名的延续,在php代码里使用了命名空间的类的类名都有命名空间前缀~
    这是php5.3后加的语法特性决定的。否则像以下两个类如何识别?
    \namespace1\classA
    \namespace2\classA楼主说的明明使用的是Storeage类,autoloader里却传入了\Think\Storeage这个得看你的写法啦
    如果你的当前php脚本里开头写了use \Think;  那么所有未标明命名空间(就是没用‘\’做前缀)的类都会被认为是 \Think 这个命名空间的,so……   
    我没用过楼主代码里的那个框架,但是如果楼主希望加载Storeage 而不是\Think\Storeage 那就应该写 new \Storeage 算了  我重新回复下~  一堆打字错误…………  对不起,我被惯坏了~
      

  9.   

    在 namespace a;
    的区域里如果这样写  1. $o = new Storeage();    //这个时候会传入的是 a\Storeage
    2. $o = new \Storeage();    //这个时候传入的是  Storeage