命名空间与自动加载系列(四)--命名空间中的常量与函数
常量与函数不受命名空间的影响。
为了方便理解,直接使用代码示例,现在来新建目录与文件:
demo
index.php
test.php
demo目录下有两个文件,分别是
index.php
与test.php
,下面来编写这两个文件
// test.php
<?php
// 公共函数
function say() {
echo 'hi php' . PHP_EOL;
}
// index.php
<?php
namespace App;
include './test.php';
say();
函数的特殊性
现在开始运行index.php
,打印出来的结果是hi php
。index.php中引入了不带命名空间的test.php
,并且输出了test.php
文件中say
方法中的内容。
下面再来改造一下index.php,为其添加一个函数,如下:
<?php
namespace App;
include './test.php';
function say() {
echo 'index.php中的say' . PHP_EOL;
}
say();
运行后得到输出的结果index.php中的say
。
由此可以得出,函数不受命名空间的影响,是全局作用的。当命名空间中有同名函数,则优先使用命名空间中的函数。
常量的特殊性
注释两个文件中的代码,从新开始
// test.php
<?php
define('NAME','自如初');
const WEB_URL = 'www.ziruchu.com';
// index.php
<?php
namespace App;
include './test.php';
echo NAME;
echo WEB_URL;
运行index.php,输出了两个常量的值。现在为test.php添加命名空间
<?php
namespace Common;
define('NAME','自如初');
const WEB_URL = 'www.ziruchu.com';
再次运行index.php文件,会发现常量NAME
的值被输出了,而通过const定义的常量WEB_URL
报错了,Fatal error: Uncaught Error: Undefined constant "App\WEB_URL"
。通过这个案例可以看到,define
与const
是有所区别的。
2021-05-15
请登录后再评论