Heim >Backend-Entwicklung >PHP-Tutorial >PHP 命名空间 use 是什么意思?

PHP 命名空间 use 是什么意思?

WBOY
WBOYOriginal
2016-06-06 20:06:581384Durchsuche

<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吧,关于自动加载可以自己搜索去。

根据你的问题,你是新手,而且几乎没有编程经验,缺乏联想和推理能力,建议自己多思考。其实这个东西有很多借鉴的,比如磁盘路径、别名使用,并不难理解,但是你在其它方面的基础欠缺造成了理解困难。

另外,要细心。不对太正常了,随便写几句当然不对。第一步是仔细的看文档,先做对一次,然后逐渐修改,遇到问题又实在想不明白就问,象你这个问题同时涉及命名空间、类、函数、常量、文件引用、自动加载一系列问题,别人根本不好回答,你描述问题都打了几百字,别人详细回答你恐怕要几千字了,一毛钱都没有废这么多时间有意义?所以最多就是简答一下,可是这样你又没法儿明白,死循环了。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn