博客列表 >类与对象--2019/07/31

类与对象--2019/07/31

LISTEN的博客
LISTEN的博客原创
2019年08月01日 20:33:071035浏览

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;




 

 

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议