博主信息
博文 32
粉丝 0
评论 0
访问量 28315
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
07-31 作业:命名空间的理解与演示类的继承与实现
Yx的博客
原创
940人浏览过
  1. 命名空间:从广义上来说,命名空间是一种封装事物的方法。在同一个空间中,不允许有重名的成员,命名空间和目录的概念是类似的, 同一目录下不允许有同名文件, 不同目录下允许有同名文件。空间分为命名空间, 匿名空间(全局空间)......

  2. // 声明命名空间: 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();
    }

    运行实例 »

    点击 "运行实例" 按钮查看在线实例

3.类的继承与实现实例:

<?php
namespace _8425;

// 面向对象的三大特征: 继承, 封装, 多态

// Demo0做为父类, 基类, 超类
class Demo0
{
//属性
    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 Demo0
{

}

$sub1_obj1=new Sub1();
echo $sub1_obj1->getInfo();
$sub1_obj2=new Sub1('admin','admin@yahu***');
echo $sub1_obj2->getInfo();
echo '<hr>';

// 子类Sub2, 来扩展父类, 就是增加属性或方法
class Sub2 extends Demo0
{
    // 扩展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(26,'sina','sina@yaho***');
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(15,'小妞','php@php.cn');
echo $sub3_obj1->getAge();
$sub3_obj1=new Sub3(25,'小钮','php@php.cn');
echo $sub3_obj1->getAge();
$sub3_obj1=new Sub3(55,'小牛','php@php.cn');
echo $sub3_obj1->getAge();

运行实例 »

点击 "运行实例" 按钮查看在线实例


批改状态:合格

老师批语:命名空间就是目录,php 脚本就是目录中的文件
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学