1、命名空间:在同一个空间中,不允许有重名的成员,命名空间和目录的概念是类似的, 同一目录下不允许有同名文件, 不同目录下允许有同名文件
空间:命名空间, 匿名空间(全局空间)
// 声明命名空间: namespace //namespace test1; //class demo1{} // //namespace test2; //class demo1{} // 空间: 命名空间, 匿名空间(全局空间) namespace demo1{ class Test{ public function hello(){ echo 'demo1--Test--'.__METHOD__; } } } namespace demo2{ class Test{ public function hello(){ // __METHOD__ 返回类的方法名 echo 'demo2--Test--'.__METHOD__; } } $demo2=new Test(); $demo2->hello(); echo '<br>'; $demo1=new \demo1\Test();//实例化另一个空间的类 $demo1->hello(); echo '<hr>'; } namespace demo3{ class Test{} // ::class, 可以获取到当前类完整的类名称 // 完整的类名称, 包括类名和它所在的命名空间的名称 echo Test::class; echo '<br>'; } //demo1, demo2, demo3, 是命名空间 // 匿名空间 namespace { class Test{ public function hello(){ echo '匿名空间--Test--'.__METHOD__; } } $obj=new Test(); $obj->hello(); }
点击 "运行实例" 按钮查看在线实例
2、类的继承与实现
<?php namespace _0731test; // 面向对象的三大特征: 继承, 封装, 多态 // Demo5做为父类, 基类, 超类 class Demo5 { //属性 public $username; public $email; // 构造方法, __construct(),魔术方法, 不需要用户主动调用, 而是由系统根据条件自动触发 // 构造方法主要用于类实例的初始化 public function __construct($username='请填写用户名',$email='请填写邮箱') { $this->username=$username; $this->email=$email; } //方法 public function getInfo(){ return '用户名:'.$this->username.' , 邮箱:'.$this->email.'<br>'; } } // 子类Sub1, 代码复用 class Sub1 extends Demo5 { } $sub1_obj1=new Sub1(); echo $sub1_obj1->getInfo(); $sub1_obj2=new Sub1('admin','admin@qq***'); echo $sub1_obj2->getInfo(); echo '<hr>'; // 子类Sub2, 来扩展父类, 就是增加属性或方法 class Sub2 extends Demo5 { // 扩展1: 添加了一个自定义属性 public $age; // 子类的构造方法 public function __construct($age,$username = '请填写用户名', $email = '请填写邮箱') { // parent: 代表着当前类的父类 parent::__construct($username, $email); // 自定义属性的初始化 $this->age=$age; } // 扩展2: 添加一个方法 public function getAge() { return '年龄:'.$this->age.'<br>'; } } // 实例化子类 $sub2_obj1=new Sub2(20,'php','php@qq***'); echo $sub2_obj1->getInfo(); echo $sub2_obj1->getAge(); echo '<hr>'; class Sub3 extends Sub2 { // 将父类Sub2中的getAge()方法进行重写, 重写也是扩展的一种 public function getAge() { $res= parent::getAge(); switch (true){ case($this->age<18): $str='还未成年,要好好学习。。。'; break; case ($this->age>=18&&$this->age<60): $str='成年了,要好好工作啊...'; break; default: $str='时间过得真快,退休了...'; } return $res.' ---- '.$str.'<br>'; } } $sub3_obj1=new Sub3(11,'哈哈','11@qq***'); echo $sub3_obj1->getAge(); $sub3_obj1=new Sub3(22,'哈哈','11@qq***'); echo $sub3_obj1->getAge(); $sub3_obj1=new Sub3(66,'哈哈','11@qq***'); echo $sub3_obj1->getAge();
点击 "运行实例" 按钮查看在线实例
3、整理
(1)//在同一个空间中,不允许有重名的成员、即 、函数, 常量, 类/接口,不能重名
(2)//实例化另一个空间的类
$demo1=new \demo1\Test();
(3)// __METHOD__ 返回类的方法名
echo __METHOD__;
// ::class, 可以获取到当前类完整的类名称、完整的类名称, 包括类名和它所在的命名空间的名称
echo Test::class;
(4)// 将类实例化,创建它的实例对象来使用
$obj1=new Demo1();
// instanceof 判断一个对象是否是某个类的实例
var_dump($obj1 instanceof Demo1);
(5)// get_class_vars(): 返回类中属性组成的数组
$properties=get_class_vars(Demo1::class);
(6)// 查看类中方法
$methods=get_class_methods(Demo3::class);
(7) // self 代表着当前类
// $this = new self;
// $this: 代表着当前类的实例, 伪变量,伪对象
(8)// 构造方法, __construct(),魔术方法, 不需要用户主动调用, 而是由系统根据条件自动触发
// 构造方法主要用于类实例的初始化
public function __construct($username='请填写用户名',$email='请填写邮箱')
{
$this->username=$username;
$this->email=$email;
}
(9)// 析构方法:在对象被删除/清理的时候自动调用
public function __destruct()
{
echo '析构方法。。。。。。';
}
(10)//销毁对象1
//unset($obj1);
//销毁对象2
//$obj2 = null;