PHP命名空间

命名空间

定义

PHP5.3.0 新增的一种封装事物的方法,解决编写的类库或应用程序时命名冲突的问题,类似window系统的文件夹

关键字 namespace

  • 必须声明命名空间,必须处于程序脚本的第一条语句,即声明前不能有任意的字符输出,如空格或html标签等;
  • 命名空间中可以包含任意合法的php代码,受命名空间影响的有类、函数、常量
  • PHP >=5.3.0 开始支持
  • namespace 可以代表当前空间,类似类中的self;namespace\Home\Student()

创建一个namespace.php文件

<?php
  	//声明一个App的命名空间
  	namespace App
    
    //1 定义一个类
    class student{
    	private $name = "小德";
    	private $age = "28";
    	public function __construct(){
            echo "{$this->name}的年龄是{$this->age}岁";
        }
	}
	
	//2 定义一个普通函数
	function dump($target){
        var_dump($target);
    }

	//3 定义一个局部常量
	const WHO = "rufeike";
	
	//4 其他任意代码
	$a = 1000;
	
?>

使用命名空间

  • 使用时需要指定空间名称
  • 命名空间与类、函数、局部常量间使用\分割;
  • 普通代码 变量、常量不在命名空间中

在当前目录创建一个index.php,引入上面的创建的namespace.php文件,进行测试使用

<?php
    //包含namespace.php 文件
    require_once("./namespace.php");
    
	//1 创建学生类对象
	//注意:直接使用会报错,需要在类前指定命名空间App/Student
	/*
	报错信息:
		Fatal error: Uncaught Error: Class 'Student' not found in 	C:\Users\rufeike\Desktop\phasher\test\index.php:3 Stack trace: #0 {main} thrown in C:\Users\rufeike\Desktop\phasher\test\index.php on line 3
	*/

	$student = new App\Student();

	//2 调用dump方法 
	App\dump("hello world!");
	
	//使用局部变量
	echo App\WHO;

	//普通代码可以直接使用
	echo $a;
    
    

命名空间子空间

  • 使用\斜线分割子空间。如 Home\Controller\Student();

定义

<?php
    //创建 App\Home\Controller的命名空间
    namespace App\Home\Controller;
	class Student{
        .....
    }

使用

<?php 
    $student = new App\Home\Controller\Student();

命名空间路径

  • 文件系统中访问文件的方式
    • 相对文件名形式:如:a.txt ,会在当前执行文件的所在文件夹中查找a.txt;
    • 相对路径名形式:如:sub/a.txt ,会在当前执行文件的所在文件夹中查找sub文件夹,再在sub中查找a.txt;
    • 绝对路径名形式:如:/main/a.txt ,会从根目录(window系统中,会从执行文件的所在盘符中)开始查找main文件夹,再在main中查走a.txt;
  • 访问命名空间中的元素方式
    • 非限定名称(不带任何前缀)。$obj = new User(),会在单前空间中查找
    • 限定名称(带相对空间的前缀)。$obj = new Home\User(),会在当前空间找子空间Home中的User类
    • 完成限定名称(从根空间开始)。$obj = new \Home\User(),会从根空间开始查找Home中的User类

命名空间use使用

  • 使用use关键字 use App\Student;
  • 如果引入类与当前空间的类起冲突时,可以使用as起别名;如use App\Student as Stu;
  • 使用use引入后,可以直接使用类名称;$student = new Student()
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值