初学第三十三章:PHP类的继承/抽象类的实现/命名空间

本文阅读 3 分钟
首页 后端,类与对象 正文

1. 类的继承扩展

33848-ma4nz6tsixf.png

//类的继承/扩展
class Demo1
{
    private int $age = 10;
    //protected 受保护的,用在当前类或者他的子类中 外部不可见
    protected string $name;
    //魔术方法
    public function __construct($name)
    {
        $this->name = $name;
    }

    public function getUser(): string
    {
        return $this->name;
    }
}
//extends继承 将Demo1中的代码复制到Demo2中
class Demo2 extends Demo1
{
    //扩展父类中的属性
    public string $guoji;
    //扩展父类中的方法
    public function __construct($age,$name,$guoji)
    {
        //parent引用父类的方法
        parent::__construct($name);
        $this->age = $age;
        $this->guoji = $guoji;
    }
    //扩展父类的方法
    public function getUser():string
    {
        return '我是'. parent::getUser() . ',年龄是'.$this->age . ',国家是'.$this->guoji;
    }
}

$demo = new Demo2(20,'张三','中国');
echo $demo->getUser();

2. 抽象类

抽象类声明关键字abstract 如果一个类中有抽象方法 那么这个类必须要被声明为抽象类

60204-lge72qsjyj.png

//抽象类
//抽象类声明关键字abstract
//如果一个类中有抽象方法 那么这个类必须要被声明为抽象类
abstract class Demo3
{
    public static $name='admin';
    //将一个没有实现的方法声明为抽象方法
    abstract public function f($name);
}
//必须在子类中将抽象方法实现
class Demo4 extends Demo3
{
    public function f($name)
    {
        return '我是'.$name;
    }
}

$demo4 = new Demo4();
echo $demo4->f('李四');

3.全局成员

  • 常量/类/接口/函数 全局成员
  • 全局成员不能重复声明全局有效
  • 用命名空间在一个文件内重复声明

23438-7lujlmhu0js.png

// 2.全局成员有哪些
/**
 * 函数/常量/类/接口
 * 全局成员不允许重复声明全局有效
 * 可以使用命名空间在一个文件内重复声明
 */
namespace Demo1;
const USER = '第一个';
class User
{

}
echo  USER;
echo '<hr>';
namespace Demo2;
const USER = '第二个';
class User
{

}
echo USER;

4.命名空间

63161-oe1o059oq0k.png

//命名空间解决了全局成员的命名冲突
//当存在命名空间时访问全局成员应该要用完整名称
//可以通过\命名空间\的方式来访问其他空间的成员
// namespace Demo;
// echo \Demo2\User::$name;


// 命名空间声明方式:
// 1. 当前路径: 非限定名称, Index
// 2. 相对路径: 限定名称, two\Index
// 3. 绝对路径: 完全限定名称, \one\two\Index

//如果命名空间太长比如是多级可以用关键字use进行修饰
// use 默认使用完全限定名称的类名/绝对路径

namespace Demo\Index;

class User
{
    public static $name = User::class.'\张三<hr>';
}



use \Demo\Index\User as UserIndex;
echo UserIndex::$name;


namespace Demo\Index1;
use \Demo\Index1\User as UserIndex1;

class User
{
public static $name = User::class.'\李四<hr>';
}
echo UserIndex1::$name;
原创文章,作者:huixiang,如若转载,请注明出处:https://www.hui-xiang.cn/archives/192.html
-- 展开阅读全文 --
初学第三十二章:文件包含/类与对象
« 上一篇 08-13
初学第三十四章:PHP类的自动加载器
下一篇 » 08-17