命名空间与自动加载系列(四)--命名空间中的常量与函数

作者: 温新

分类: 【PHP基础】

阅读: 2073

时间: 2021-05-17 11:24:33

常量与函数不受命名空间的影响

为了方便理解,直接使用代码示例,现在来新建目录与文件:

demo
  index.php
  test.php

demo目录下有两个文件,分别是index.phptest.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"。通过这个案例可以看到,defineconst是有所区别的。

2021-05-15

请登录后再评论