Blogger Information
Blog 32
fans 0
comment 0
visits 22556
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
07-31 作业:命名空间的理解与演示类的继承与实现
Yx的博客
Original
788 people have browsed it
  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();

运行实例 »

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


Correction status:qualified

Teacher's comments:命名空间就是目录,php 脚本就是目录中的文件
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post