Blogger Information
Blog 39
fans 0
comment 0
visits 34017
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
类与对象--2019/07/31
LISTEN的博客
Original
1033 people have browsed it

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;




 

 

Correction status:qualified

Teacher's comments:代码不仅仅要写对, 还要总结, 并记住
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