zoukankan      html  css  js  c++  java
  • PHP 面向对象的三大特征

    //面向对象三大特性
    //一、封装
    //目的:让类更加安全,不让外界直接访问类里面的成员变量
    //做法:1.把成员变量变成私有
    //     2.做一个方法来实现变量的取值或赋值,在里面加限制条件
    
    //使用类里面提供的魔术方法也可以实现对私有成员的操作
    //__set方法
    //特点:会自动执行,把赋值语句中的变量名作为第一个参数,把变量值作为第二个参数调用
    //__get方法
    //特点:会自动执行,把取值语句中的变量名作为参数调用
    
    //$r->setage=20;
    //$r->__set("name","张三");
    $r->name="李四";  //执行语句会自动调用__set方法
    $r->sex="女";  //每一个成员都可以使用
    $r->age="100";
    
    var_dump($r);
    <?php
    
    //类:由众多对象抽象出来的
    //对象:通过类实例化出来的
    //定义类:
    class Info
    {
        const p = 3.1425926; //将某些类里面常用到的东西定义为常量,方便使用
        
        public static $class; //static关键字定义静态的
        public $code;
        protected $name;
        private $sex;
        
        static function Test() //静态方法
        {
            echo self::$class; //调用自身类里面的静态成员
            echo "静态方法!";
        }
        
        function __construct($s)
        {
            $this->sex = $s;
        }
        
        function Say()
        {
            echo self::$class; //普通方法里面可以调用静态成员
            echo "hello";
        }
        
        function GetSex()
        {
            return $this->sex;
        }
        function SetSex($s)
        {
            $this->sex = $s;
        }
        
        function __set($n,$v)
        {
            $this->$n = $v;
        }
        
        function __get($n)
        {
            return $this->$n;
        }
    }
    
    //对象实例化
    $r = new Info("女");
    $r->code = "join";
    $r->sex;
    /*Info::$class = "0305";
    $r->Say();*/
    
    /*Info::$class = "0305"; //访问静态成员
    Info::Test();*/
    
    
    
    //三大特性
    //封装:
    //目的:为了让类更加安全,避免外界直接访问成员变量
    //做法:1.把成员变量变为私有的
    //2.通过方法(函数)来间接的操作成员变量
    
    //继承
    //概念:如果一个类有子类,那么该子类会继承父类的一切东西(私有成员访问不到)
    //在定义子类的时候需要加一个关键字:extends
    //特点:单继承,一个儿子只能有一个父亲,一个类只能有一个父类
    //如果父类中有构造函数,子类在实例化的时候要按照父类构造函数的标准来实例化
    //子类对父类方法的重写:在子类中写一个同样的方法
    //final:用来修饰类,代表该类是一个最终类,该类无法被继承
    
    /*class Test extends Info
    {
        public $birthday;
        
        function Run()
        {
            echo "run";
        }
        
        function Say()
        {
            parent::Say(); //调用父类的Say()方法
            echo "Test Say";
        }
        
    }
    
    $t = new Test("女");
    $t->code = "p001";
    //echo $t->sex;
    $t->Say();
    //$t->Run();*/
    
    
    //静态成员
    //类里面的普通成员是属于对象的,不是属于类的(调用的时候是用对象调用)
    //什么叫做静态的:类静态成员是属于类的,不是属于每个对象的
    //定义静态成员用static关键字修饰
    //静态方法里面无法调用普通成员
    //静态方法可以调用静态成员,使用self关键字来调用
    //self代表该类,$this代表该对象
    
    ?>
    <?php
    
    class Ren
    {
        public $name;
        public $sex;
        
        function Say()
        {
            echo "hello";
        }
    /*    function Say($a)
        {
            echo $a."hello";
        }
        function Say($a,$b)
        {
            echo $a.$b."hello";
        }*/
        
        function __tostring() //可以输出类的一些描述
        {
            return "这个对象包含变量name和sex,一个Say方法";
        }
        
        function __clone() //对象克隆的时候自动执行
        {
            $this->name="李四"; //$this指复本(克隆出来的新对象)
        }
    
    }
    class China extends Ren
    {
        function Say()
        {
            echo "你好";
        }
    }
    
    //多态
    //概念:当父类引用指向子类实例的时候,由于子类对父类函数进行了重写,导致我们在使用该引用去调用相应的方法表现出的不同
    //条件:1.必须有继承
    //2.子类必须要对父类的方法进行重写
    
    /*$r = new Ren();
    
    echo $r;*/
    
    /*$r = new Ren(); //$r代表Ren类的引用
    $r1 = new China(); //$r1代表China的引用*/
    
    //Ren $r = new America(); 
    //$r->Say();
    
    
    //函数重载
    //条件:1.函数名必须相同
    //2.函数里面参数的个数不同
    //如果个数相同,类型不同
    /*$r = new Ren();
    $r->Say();*/
    
    //php是弱类型语言,所以没有重载
    //php有可变参数的函数
    
    //__tostring()方法
    
    //对象的克隆
    
    /*$r = new Ren();
    $r->name = "张三";
    
    $r1 = clone $r; //克隆对象
    echo $r->name;
    echo $r1->name;*/
    //var_dump($r1);
    
    ?>
  • 相关阅读:
    [C++空间分配]new运算符、operator new、placement new的区别于联系
    [C++STL]stl源码剖析
    [C++基础]在构造函数内部调用构造函数
    Eclipse Memory Analyzer
    zookeeper 学习 zookeeper下载部署
    Doracle.jdbc.J2EE13Compliant=true
    zookeeper 学习 状态机复制的共识算法
    java -d
    轮盘选择法
    OPENJDK 源码编译
  • 原文地址:https://www.cnblogs.com/yy01/p/5443319.html
Copyright © 2011-2022 走看看