>백엔드 개발 >PHP 튜토리얼 >PHP 命名空间 use 是什么意思?

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

WBOY
WBOY원래의
2016-06-06 20:06:581384검색

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

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

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.