美文网首页
6.php面向对象

6.php面向对象

作者: dwy_interesting | 来源:发表于2020-05-27 10:04 被阅读0次

    面向对象的基本概念

    什么是类

    类是由相同特征(属性、静态的)和行为(方法、动作)的一组对象构成
    分类、类型、自定义类型
    比如:人类...

    什么是对象

    对象就是一个一个的实体,看得见、摸得着
    比如:任何一个人的个体都是一个对象

    类和对象的关系

    类的实例就是对象,对象的抽象就是类
    比如:将人类实例化才有人的个体,
    所有的人都可以抽象的说他属于人类

    类的定义和类的实例

    类的定义:

     class 类名{  
            类中成员;  
     }  
    

    举个栗子:

    <?php
        class Person {
            //成员属性: 姓名、性别、年龄、身高、体重、电话等   -- 静态描述
            var $name; 
            //成员方法:说话、学习、走路、吃饭、开车、敲代码等   -- 动态描述
            function say() {   //声明第一个成员方法,定义人说话的功能
                 //方法体
            }
         }
    ?>
    

    类的实例:

    通过关键字new 来声明一个对象,并使用 对象名->成员属性/方法 操作对象属性
    举个栗子:

    <?php
        class Person {
                public $name;
    public function say() {  
                echo '哇哦~哇哦~哇哦~哇哦!';    
    }   
           }
        $person = new Person();
        $person->name = '小团团';
        echo "person的名字是:".$person->name."";
        $person ->say();
    ?>
    

    类常量

    常量是不会改变的值,是一个恒值
    定义常量使用关键字const
    常量输出格式 类名::常量名
    注意:在定义和使用常量的时候不需要使用 $ 符号
    举个栗子:

    <?php
        class Person {
            const  PERSON_NAME = ''人类'';
        
           }
        echo Person::PERSON_NAME;
    ?>
    

    $this的使用

    变量 this 代表自身的对象,使用this->可以调用类中方法,$this只能用在成员方法中,其它任何地方都不能使用。
    举个栗子:

    <?php
    class People {
        public $name;
        function setName($par){
            $this->name= $par;
        }
        function getName(){
            echo $this->name;
        }
      }
    $tuantuan= new People ;
    $tuantuan->setTitle( "一条小团团" );
    // 调用成员函数,获取名字
    $tuantuan->getTitle();
    ?>
    

    封装/继承/多态

    定义成员变量时的关键字:public、private、protected
    public -- 公开成员,可以在程序中的任何位置(类内/外)被其他的类/子类和对象调用。
    private -- 私有成员,只能在所属类的内部被调用和修改,不可以再类外/子类被访问
    protected -- 保护成员,在本类和子类中被调用,其他地方则不可以被调用

    封装:

    也可以称为信息隐藏,封装后对外只提供可操作的方法,不会告诉你内部结构。封装一个类需要两步 第一步是私有化一个类 第二步是用set和get 做出读取赋值的操作
    预定义两种函数来进行获取与敷值操作
      __get 获取值
      __set 设置值

    <?php 
    class Person { 
    private $name; 
        private function __get($property_name) { //__get()方法用来获取私有属性 
    echo "在直接获取私有属性值的时候,自动调用了这个__get()方法<br>"; 
    if(isset($this->$property_name)) { 
        return($this->$property_name); 
    } else { return(NULL); } 
           } 
    private function __set($property_name, $value) { //__set()方法用来设置私有属性
    echo "在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值<br>"; 
    $this->$property_name = $value; 
    } 
            } 
    $p1=newPerson(); 
    $p1->name="张三"; //直接为私有属性赋值的操作,会自动调用__set()方法进行赋值 
    echo "年龄:".$p1->name."<br>"; //直接获取私有属性值,会自动调用__get()方法,返回成员属性值 
    ?>
    

    继承

    继承:子类可以继承父类的属性和方法,但是是有限继承,public、protected、private三个修饰的属性都可以继承,public、protected两个修饰的方法可以继承,父类的常量可以继承。
    extends声明继承关系
    语法格式:class B extends A 此范例指明 B继承了A
    子类继承父类的所有内容,但父类中的private部分不能直接访问
    子类中新增加的属性和方法是对父类的扩展
    子类中定义的与父类同名的属性是对父类属性的覆盖,同名的方法也是对父类方法的覆盖
    重写的方法
    在子类中,使用parent访问父类中的被覆盖的属性和方法

    parent::__construct();
    parent::$name;
    parent::fun();
    

    clone克窿对象 语法格式

    $c=clone $p; 
    

    c克窿的对象p 输出

    echo $c->name;
    

    多态

    多态:同一个操作(函数)作用于不同的类的实例,将产生不同的执行结果
    举个栗子:

    <?php 
    class Animal{ 
    public $name; 
    public $price; 
    function talk(){ 
        echo 'wu wu wu'; 
    } 
    } 
    
    class Dog extends Animal{ 
    //覆盖、重写 
    function talk(){ 
        echo 'Wang Wang!'; 
        Animal::talk();//这里不会报错,能正确执行父类的talk(); 
    } 
    } 
    
    $dog1=new Dog(); 
    $dog1->talk(); 
    ?>
    

    构造方法和析构方法

    构造方法:生成对象时自动执行的成员方法,作用就是初始化对象。该方法可以没有参数,可以有多个参数。定义构造方法:void __construct (arg)
    举个栗子:

    <?php
         class Person{
            public $name;
            public $age;
            function __construct($p1, $p2){//使用构造方法给自己的成员属性赋值
                $this->name = $p1;
                $this->age = $p2;
            }
            function say(){
                echo "我叫{$this->name},我今年{$this->age}<br>";
            }
        }
        $person= new Person('小仙女', 18);
        $person->say();
    ?>
    

    析构方法:与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数,作用时释放内存。定义析构方法: void __destruct()
    举个栗子:

    <?php
    class Person{
            public $name;
            function __construct($p){
                $this->name = $p;
                echo "我的名字是{$this->name},很高兴认识你。<br>";
            }
    
            //声明一个析构方法,在对象销毁前自动调用
            function __destruct(){
                echo "感谢相遇{$this->name}先生,珍重!<br>";
            }
        }
        $person= new Person('易烊千玺');
    ?>
    

    静态变量和静态方法

    static -- 静态成员,不需要实例化对象即可使用,在对象被销毁后仍可保存被修改的值
    写法:

    static $属性名/static fun()
    

    使用:
    类名::$属性名/类名::方法名
    举个栗子:

    <?php
    class Math{
        static  $a = 0;
        static  function  b ($x,$y){
            $q =  $x  + $y;
            return $p;
        }
    }
    $matn_a = Math::$a;//调用类中的静态属性
    var_dump($matn_a);
    $math_b = Math::b(2,3);//调用类中的静态方法
    var_dump($math_b);
    ?>
    

    相关文章

      网友评论

          本文标题:6.php面向对象

          本文链接:https://www.haomeiwen.com/subject/tredwhtx.html