autoload()为什么传进去的参数居然带上了命名空间? 本帖最后由 zhuzhaodan 于 2014-01-17 22:25:13 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 按照php规则,没找到的类名称 Storeage 会作为参数传到 autoload里面,他没找到的是Storeage类,而不是Think\Storeage类,他为什么乱加 他没有乱加,而是你理解错了autoload 你总是要告诉他到哪里去找需要的类的 在换个说法,php运行到storeage这里时,发现没有这个类,然后他求助autoload()方法,他告诉autoload方法,我没找到Storeage类,php唯一能提供给autoload的线索就是Storeage这个关键字,但是现在是,php太牛逼了,我自己无私的花自己的钱雇了私人侦探,我再额外给你提供一条消息,他在think\里面,php怎么知道他一定在think\里面?这是怎么回事? 但是我没告诉autoload去think\里面找这个类啊,他怎么不去Home\空间去找啊 那你就看看 Think\Think::autoload 里面是如何写的 命名空间本来就是类名的延续,在php代码里使用了命名空间的类的类名都有命名空间前缀~这是php5.4后加的语法特性决定的。否则像以下两个类如何识别?\namespace1\classA\namespace2\classA楼主说的明明使用的是Storeage类,autoloader里却传入了\Think\Storeage这个得看你的写法啦如果你的当前php脚本里开头写了user \Think; 那么所有标明命名空间(就是没用‘\’做前缀)的类都会被认为是 \Think 这个命名空间的,so…… 我没用过楼主代码里的那个框架,但是如果楼主希望加载Storeage 而不是\Think\Storeage 那就应该写 new \Storeage 哦 说错了 是5.3 囧了个囧~ 没法修正…………哦 说错了 是php5.3带来的语法 囧了个囧~ 没法修正………… 命名空间本来就是类名的延续,在php代码里使用了命名空间的类的类名都有命名空间前缀~这是php5.3后加的语法特性决定的。否则像以下两个类如何识别?\namespace1\classA\namespace2\classA楼主说的明明使用的是Storeage类,autoloader里却传入了\Think\Storeage这个得看你的写法啦如果你的当前php脚本里开头写了use \Think; 那么所有未标明命名空间(就是没用‘\’做前缀)的类都会被认为是 \Think 这个命名空间的,so…… 我没用过楼主代码里的那个框架,但是如果楼主希望加载Storeage 而不是\Think\Storeage 那就应该写 new \Storeage 算了 我重新回复下~ 一堆打字错误………… 对不起,我被惯坏了~ 在 namespace a;的区域里如果这样写 1. $o = new Storeage(); //这个时候会传入的是 a\Storeage2. $o = new \Storeage(); //这个时候传入的是 Storeage PHP 视屏如何添加超链接 php数据库链接类(在线等) JPGraph修改周的刻度表示 关于上传任意路径的文件 截取字符串问题? session_start() utf-8 问题 验证码问题 ~€ 又一个新程序员MM的工作总结 €~ $tpl = new rFastTemplate("./tpl"); php 查询sql server 2008的问题 关于php文件加密解密,请教高手 一个PHP和mysql表的设计,匹配关键词的
按照php规则,没找到的类名称 Storeage 会作为参数传到 autoload里面,他没找到的是Storeage类,而不是Think\Storeage类,他为什么乱加
autoload 你总是要告诉他到哪里去找需要的类的
在换个说法,php运行到storeage这里时,发现没有这个类,然后他求助autoload()方法,他告诉autoload方法,我没找到Storeage类,php唯一能提供给autoload的线索就是Storeage这个关键字,但是现在是,php太牛逼了,我自己无私的花自己的钱雇了私人侦探,我再额外给你提供一条消息,他在think\里面,php怎么知道他一定在think\里面?这是怎么回事?
但是我没告诉autoload去think\里面找这个类啊,他怎么不去Home\空间去找啊
这是php5.4后加的语法特性决定的。否则像以下两个类如何识别?
\namespace1\classA
\namespace2\classA楼主说的明明使用的是Storeage类,autoloader里却传入了\Think\Storeage这个得看你的写法啦
如果你的当前php脚本里开头写了user \Think; 那么所有标明命名空间(就是没用‘\’做前缀)的类都会被认为是 \Think 这个命名空间的,so……
我没用过楼主代码里的那个框架,但是如果楼主希望加载Storeage 而不是\Think\Storeage 那就应该写 new \Storeage
这是php5.3后加的语法特性决定的。否则像以下两个类如何识别?
\namespace1\classA
\namespace2\classA楼主说的明明使用的是Storeage类,autoloader里却传入了\Think\Storeage这个得看你的写法啦
如果你的当前php脚本里开头写了use \Think; 那么所有未标明命名空间(就是没用‘\’做前缀)的类都会被认为是 \Think 这个命名空间的,so……
我没用过楼主代码里的那个框架,但是如果楼主希望加载Storeage 而不是\Think\Storeage 那就应该写 new \Storeage 算了 我重新回复下~ 一堆打字错误………… 对不起,我被惯坏了~
的区域里如果这样写 1. $o = new Storeage(); //这个时候会传入的是 a\Storeage
2. $o = new \Storeage(); //这个时候传入的是 Storeage