namespace
关键字来声明一个命名空间;//声明一个命名空间的语法格式
namespace SpaceName;
/*
这里的代码都是空间中的代码;
*/
语法说明:
(1)namespace 是声明空间的关键字,不区分大小写
(2)SpaceName 是定义的空间名称,命名方式与类名相同
(3)所有代码都可以存在与空间中
(4)只有类、函数、常量代码会受到空间影响
代码例子:
namespace.php
//声明一个命名空间
namespace App;
//(1)定义一个学生类
class Student{
private $name="小明";
public function __construct(){
echo "我的名字叫:{
$this->name}
";
}
}
//(2)定义一个函数
function showInfo(){
echo "PHP命名空间函数";
}
//(3)定义一个常量
const DB_HOST="localhost";
//(4)定义一个变量
$a=1000;
app.php
//声明页面字符集
header("content-type:text/html;charset=utf-8");
//(1)包含文件
require_once("./namespace.php");
//(2)创建学生类对象
$obj=new App\Student();
//(3)调用showInfo()函数
App\showInfo();
echo "
".App\DB_HOST;
echo "
".$a;
文件夹可以有子目录的情况,命名空间也有子空间情况。
代码例子:
namespace02.php
//声明一个命名空间
namespace App\Home\Controller;
//(1)定义一个学生类
class Student{
private $name="小明";
public function __construct(){
echo "我的名字叫:{
$this->name}
";
}
}
//(2)定义一个函数
function showInfo(){
echo "PHP命名空间函数";
}
//(3)定义一个常量
const DB_HOST="localhost";
//(4)定义一个变量
$a=1000;
app02.php
//声明页面字符集
header("content-type:text/html;charset=utf-8");
//(1)包含文件
require_once("./namespace02.php");
//(2)创建学生类对象
$obj=new App\Home\Controller\Student();
//(3)调用showInfo()函数
App\Home\Controller\showInfo();
echo "
".App\Home\Controller\DB_HOST;
echo "
".$a;
建议:一个文件不要定义多个空间。
代码例子:
namespace03.php
//声明第1个命名空间
namespace App\Home\Controller;
//定义一个学生类
class Student{
private $name="小明";
public function __construct(){
echo "我的名字叫:{
$this->name}
";
}
}
//声明第2个命名空间
namespace App\Home\Model;
//定义一个学生类
class Student{
private $name="小红";
public function __construct(){
echo "我的名字叫:{
$this->name}
";
}
}
app03.php
//声明页面字符集
header("content-type:text/html;charset=utf-8");
//(1)包含文件
require_once("./namespace03.php");
//(2)创建学生类对象
$obj1=new App\Home\Controller\Student();
$obj2=new App\Home\Model\Student();
提示:用大括号把空间代码括起来;
-保持一致。要加大括号,所有空间都加大括号;不加大括号,所有空间都不加。
//声明第1个命名空间
namespace App\Home\Controller{
//定义一个学生类
class Student{
private $name="小明";
public function __construct(){
echo "我的名字叫:{
$this->name}
";
}
}
}
//声明第2个命名空间
namespace App\Home\Model{
//定义一个学生类
class Student{
private $name="小红";
public function __construct(){
echo "我的名字叫:{
$this->name}
";
}
}
}
如果一个文件用大括号语法定义多个命名空间,如果要写全局代码,还不想把全局代码加到某个命名空间中,该怎么写?
namespace.php
//声明第1个命名空间
namespace App\Home\Controller{
//定义一个学生类
class Student{
private $name="小明";
public function __construct(){
echo "我的名字叫:{
$this->name}
";
}
}
}
//声明第2个命名空间
namespace App\Home\Model{
//定义一个学生类
class Student{
private $name="小红";
public function __construct(){
echo "我的名字叫:{
$this->name}
";
}
}
}
//声明第3个匿名空间(全局代码、根空间代码)
namespace {
//定义一个教师类
class Teacher{
public function __construct(){
echo "定义一个教师";
}
}
}
app.php
//声明页面字符集
header("content-type:text/html;charset=utf-8");
//(1)包含文件
require_once("./namespace.php");
//(2)创建学生类对象
$obj1=new App\Home\Controller\Student();
$obj2=new App\Home\Model\Student();
$obj3=new Teacher();
$obj=new Student()
,它的完整路径是:$obj=new curSpace\Student()
$obj=new Home\Student()
,它的完整路径是:$obj=new curSpace\Home\Student()
;$obj=new \App\Home\Controller\Student()
,它的完整访问路径是:$obj=new \App\Home\Controller\Student()
限定名称-代码例子:
//声明第1个命名空间
namespace App{
//定义一个学生类
class Student{
private $name="小明";
public function __construct(){
echo "我的名字叫:{
$this->name}
";
}
}
//创建学生类对象(非限定访问方式)
$stuObj=new Student();
//创建教师类对象(限定访问方式)
$staObj=new Home\Teacher();
//创建教师类对象(完全限定访问方式)
$staObj=new \APP\Home\Teacher();
}
//声明第2个命名空间
namespace App\Home{
//定义一个教师类
class Teacher{
private $name="小红";
public function __construct(){
echo "我的名字叫:{
$this->name}
";
}
}
}
例子代码:
//声明第1个命名空间
namespace App{
//定义一个学生类
class Student{
private $name="小明";
public function __construct(){
echo "我的名字叫:{
$this->name}
";
}
}
//创建学生类对象,namespace就代表APP空间名
$stuObj=new namespace\Student();
//创建教师类对象,namespace就代表APP空间名
$staObj=new namespace\Home\Teacher();
//声明第2个命名空间
namespace App\Home{
//定义一个教师类
class Teacher{
private $name="小红";
public function __construct(){
echo "我的名字叫:{
$this->name}
";
}
}
}
描述:获取当前命名空间的字符串名称。
代码例子:
//声明第1个命名空间
namespace App{
//定义一个学生类
class Student{
private $name="小明";
public function __construct(){
echo "我的名字叫:{
$this->name}
";
}
}
//构建类名:"App\Student"
$className = __NAMESPACE__."\Student";
//创建学生类对象
$stuObj=new $className();
}
use App\Home\Controller\Student;
use App\Home\Controller;
use App\Home\Controller as Controller;
use App\Home\Controller\Student as Student2;
代码例子:
namespace.php
//声明第1个命名空间
namespace App\Home\Controller;
//定义一个学生类
class Student{
private $name="小明";
public function __construct(){
echo "我的名字叫:{
$this->name}
";
}
}
app.php
//声明页面字符集
header("content-type:text/html;charset:utf-8");
//(1)包含文件
require_once("./namespace.php");
//(2)导入空间,默认的空间别名为最后一个单词
use \App\Home\Controller;
$obj=new Controller\Student();
//(3)导入空间并起别名
use \App\Home\Controller as Cont;
$obj=new Cont\Student();
//(4)导入空间中的类,默认的类名为最后一个单词
use \App\Home\Controller\Student;
$obj=new Student();
//(5)导入空间中的类,并起别名
use \App\Home\Controller\Student as Stu;
$obj=new Stu();