Maison >développement back-end >tutoriel php >PHP 命名空间 use 是什么意思?
<code><?php namespace foo; use My\Full\Classname as Another;//★★★★★★★★这句什么意思?★★★★★★★★ // 下面的例子与 use My\Full\NSname as NSname 相同 use My\Full\NSname; // 导入一个全局类 use ArrayObject; // importing a function (PHP 5.6+) use function My\Full\functionName; // aliasing a function (PHP 5.6+) use function My\Full\functionName as func; // importing a constant (PHP 5.6+) use const My\Full\CONSTANT; $obj = new namespace\Another; // 实例化 foo\Another 对象 $obj = new Another; // 实例化 My\Full\Classname 对象 NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func $a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象 // 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象 func(); // calls function My\Full\functionName echo CONSTANT; // echoes the value of My\Full\CONSTANT ?></code>
这是别人给我的一个帮助文档讲 use 的?
namespace foo; 我知道,应该是开辟一个 叫foo的空间;
use My\Full\Classname as Another; 是什么意思?
as 我懂,是别名 mysql 也有这个语法
use My\Full\Classname
我不懂了,
问题1:
use My\Full\Classname 的意思是使用 My\Full\Classname 空间的意思?
问题3:
My\Full 是个空间路径? classname是个类名?
还是 My\Full\classname 是个路径?
My\Full\classname 这个空间再哪里写着?或者 MyFull 这个空间路径在哪?
反正这个php文件里面没有 就 namespace 了一次,所以应该不在这个文件,
不在这个文件在哪?
也没有 include(), 也没有 require().
是在一个别的文件吗?
那这个文件在哪?整个电脑有无数文件,他怎么知道这个文件在哪?
难道打开这个文件之后,他会把整个电脑遍历一遍吗?
问题2:
use My\Full\Classname 之后能干嘛?
如果 include("1.php"); 之后,可以使用 1.php 里面的变量 类 function 等,
但是 use My\Full\Classname 能干嘛?
我写了下面俩文件:
<code><?php namespace yangbin\a; const aValue = "yangbin\\a";</code></code>
<code><?php use yangbin\a; echo yangbin\a\aValue;</code></code>
为什么输出不了 aValue???
<code><?php namespace foo; use My\Full\Classname as Another;//★★★★★★★★这句什么意思?★★★★★★★★ // 下面的例子与 use My\Full\NSname as NSname 相同 use My\Full\NSname; // 导入一个全局类 use ArrayObject; // importing a function (PHP 5.6+) use function My\Full\functionName; // aliasing a function (PHP 5.6+) use function My\Full\functionName as func; // importing a constant (PHP 5.6+) use const My\Full\CONSTANT; $obj = new namespace\Another; // 实例化 foo\Another 对象 $obj = new Another; // 实例化 My\Full\Classname 对象 NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func $a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象 // 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象 func(); // calls function My\Full\functionName echo CONSTANT; // echoes the value of My\Full\CONSTANT ?></code>
这是别人给我的一个帮助文档讲 use 的?
namespace foo; 我知道,应该是开辟一个 叫foo的空间;
use My\Full\Classname as Another; 是什么意思?
as 我懂,是别名 mysql 也有这个语法
use My\Full\Classname
我不懂了,
问题1:
use My\Full\Classname 的意思是使用 My\Full\Classname 空间的意思?
问题3:
My\Full 是个空间路径? classname是个类名?
还是 My\Full\classname 是个路径?
My\Full\classname 这个空间再哪里写着?或者 MyFull 这个空间路径在哪?
反正这个php文件里面没有 就 namespace 了一次,所以应该不在这个文件,
不在这个文件在哪?
也没有 include(), 也没有 require().
是在一个别的文件吗?
那这个文件在哪?整个电脑有无数文件,他怎么知道这个文件在哪?
难道打开这个文件之后,他会把整个电脑遍历一遍吗?
问题2:
use My\Full\Classname 之后能干嘛?
如果 include("1.php"); 之后,可以使用 1.php 里面的变量 类 function 等,
但是 use My\Full\Classname 能干嘛?
我写了下面俩文件:
<code><?php namespace yangbin\a; const aValue = "yangbin\\a";</code></code>
<code><?php use yangbin\a; echo yangbin\a\aValue;</code></code>
为什么输出不了 aValue???
use就是说明一下我要用这个东西,后面就可以简写了。例如
<code>use Project\Model\Table; $table = new Table();</code>
简单说,如果使用了use,那么后面使用的时候只要用最后一个斜杠之后的名字,或者是as指定的别名就可以了,上例不使用use的话,等效代码为
<code>$table = new \Project\Model\Table();</code>
你写的文件不成功是因为你没好好看例子。应该是
<code>use const yangbin\a\aValue; echo aValue;</code>
你可以认为命名空间是个路径,再使用命名空间的前提下 完整类名 = 命名空间路径 + 类名
关于include/require,这和use没关系,前面告诉过你了,使用use之后再后面调用的时候就能简写了,别的用处没有。所以如果无法自动加载就自己include吧,关于自动加载可以自己搜索去。
根据你的问题,你是新手,而且几乎没有编程经验,缺乏联想和推理能力,建议自己多思考。其实这个东西有很多借鉴的,比如磁盘路径、别名使用,并不难理解,但是你在其它方面的基础欠缺造成了理解困难。
另外,要细心。不对太正常了,随便写几句当然不对。第一步是仔细的看文档,先做对一次,然后逐渐修改,遇到问题又实在想不明白就问,象你这个问题同时涉及命名空间、类、函数、常量、文件引用、自动加载一系列问题,别人根本不好回答,你描述问题都打了几百字,别人详细回答你恐怕要几千字了,一毛钱都没有废这么多时间有意义?所以最多就是简答一下,可是这样你又没法儿明白,死循环了。