Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

How namespaces exist in PHP and the differences between unqualified names, qualified names and fully qualified names

2025-03-26 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Internet Technology >

Share

Shulou(Shulou.com)06/02 Report--

这篇文章主要介绍"PHP中命名空间是怎样的存在以及非限定名称、限定名称、完全限定名称的区别",在日常操作中,相信很多人在PHP中命名空间是怎样的存在以及非限定名称、限定名称、完全限定名称的区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"PHP中命名空间是怎样的存在以及非限定名称、限定名称、完全限定名称的区别"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

PHP中命名空间是怎样的存在子命名空间

命名空间本身就像目录一样,所以命名空间当然也是可以定义子命名空间的,真的就和操作系统的各种目录层级是完全一样的。我们通过简单的例子来看看。首先还是创建三个php文件,其中3-2和3-2-1是使用的相同的二级命名空间,3-2-1在FILE32的基础上继续向下扩展了第三级的命名空间FILE321。他们都是MyProject命名空间的子命名空间。

// file3-1.php

namespace MyProject\FILE31;

function testA31(){

echo 'FILE31\testA()', PHP_EOL;

}

// file3-2.php

namespace MyProject\FILE32;

const CONST_A32 = "file3-2";

function testA32(){

echo 'FILE32\testA()', PHP_EOL;

}

class objectA32{

function test(){

echo 'FILE32\ObjectA', PHP_EOL;

}

}

// file3-2-1.php

namespace MyProject\FILE32\FILE321;

function testA321(){

echo 'FILE321\testA()', PHP_EOL;

}

接下来的使用就很简单了,和使用一级命名空间一样,直接使用use进行导入就可以了。

// 子命名空间

require 'namespace/file3-1.php';

require 'namespace/file3-2.php';

require 'namespace/file3-2-1.php';

use MyProject\FILE31;

use MyProject\FILE32;

use MyProject\FILE32\FILE321;

FILE31\testA31(); // FILE31\testA()

FILE32\testA32(); // FILE32\testA()

FILE32\FILE321\testA321(); // FILE321\testA()

FILE321\testA321(); // FILE321\testA()

同一文件中定义多个命名空间

PHP是允许在一个文件中定义多个命名空间的,但是并不推荐这么做,因为这样可能会带来各种未知的混乱。在这里,我们只要了解到可以这样使用就行了,在日常的开发中还是尽量要避免。

// file4.php

namespace FILE41;

function testA41(){

echo 'FILE41\testA()', PHP_EOL;

}

namespace FILE42;

function testA42(){

echo 'FILE42\testA()', PHP_EOL;

}

在使用中当然也和其他命名空间的使用没什么两样,直接use使用即可。

// 一个文件中多个命名空间

require 'namespace/file4.php';

use FILE41, FILE42;

FILE41\testA41(); // FILE41\testA()

FILE42\testA42(); // FILE42\testA()

非限定名称、限定名称、完全限定名称

不要被术语吓到,这三个术语其实非常好理解。

非限定名称,名称中不包含命名空间分隔符的标识符,例如 Foo 。限定名称,名称中含有命名空间分隔符的标识符,例如 Foo\Bar 。名称中包含命名空间分隔符,并以命名空间分隔符开始的标识符,例如 \Foo\Bar。namespace\Foo 也是一个完全限定名称。

直接用例子来说就非常清晰了。

// 非限定名称、限定名称、完全限定名称

use MyProject\FILE32\objectA32 as obj32;

$o = new obj32(); // 非限定名称

$o->test(); // FILE32\ObjectA

$o = new FILE32\objectA32(); // 限定名称

$o->test(); // FILE32\ObjectA

$o = new \MyProject\FILE32\objectA32(); // 完全限定名称

$o->test(); // FILE32\ObjectA

namespace关键字和__NAMESPACE__常量namesapce,显式访问当前命名空间或子命名空间中的元素。它等价于类中的 self 操作符。NAMESPACE,包含当前命名空间名称的字符串。在全局的,不包括在任何命名空间中的代码,它包含一个空的字符串。

也是很简单的内容吧,直接来看例子。

// file5.php

namespace FILE5;

function test(){

echo __NAMESPACE__ . ': test()', PHP_EOL;

}

// test.php

namespace Pro;

// namespace与__NAMESPACE__

require 'namespace/file5.php';

function test(){

echo __NAMESPACE__ . ': test()', PHP_EOL;

}

namespace\test(); // Pro: test()

\FILE5\test(); // FILE5: test()

到此,关于"PHP中命名空间是怎样的存在以及非限定名称、限定名称、完全限定名称的区别"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Internet Technology

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report