• 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);
    
    ?>
  • 相关阅读:
    MSDN Magazine搞错了
    Visual Studio 2005中设置调试符号(Debug Symbols)
    BCB 6的问题
    吴裕雄天生自然Spring Boot使用Spring Data JPA实现人与身份证的一对一关系映射
    吴裕雄天生自然Spring BootSpring Data JPA
    吴裕雄天生自然Spring BootSpring Boot对JSP的支持
    吴裕雄天生自然Spring BootSpring Boot的异常统一处理
    吴裕雄天生自然Spring Boot使用Spring Data JPA实现Author与Article的一对多关系映射
    吴裕雄天生自然Spring Boot解决 Error creating bean with name 'entityManagerFactory' defined in class path resource
    吴裕雄天生自然Spring Boot@ExceptionHandler注解和@ControllerAdvice注解
  • 原文地址:https://www.cnblogs.com/yy01/p/5443319.html
Copyright © 2020-2023  润新知