zoukankan      html  css  js  c++  java
  • PHP 对象及其三大特性

    //面向过程
    
    //类和对象
    //对象:任何东西都可以成为对象,类实例化出来的东西
    //类:对所有同类的对象抽象出来的东西
    
    //info:code,name,sex,nation,birthday
    //对象:一条具体的信息:p001,张丹,女,汉,1990-12-04
    
    //定义类
        class Ren
        {
            public static $class;
            private $Name; //成员变量
            private $age;
            private $height;
            var $sex;//一般不要给成员变量赋值
            const π=3.1425926;//将某些类里面常用的 定义为常量
            
            static function test()//静态方法
            {
                echo self::$class;            
                echo "静态方法";
            }
            function __construct($s)
            {
                $this->sex=    $s;
            }
        
            function Run()//成员函数(方法)
            {
                echo "这个人正在奔跑";    
            }
            function Say()
            {
                echo self::$class;
                //echo $Name."正在说话";//错误写法
                echo $this->Name."正在说话";//正确写法,$this表示该对象
            }
            function __destruct()//析构函数,对象销毁前执行
            {
                echo "该对象销毁了";
            }
            /*function SetAge($a)
            {
                if($a>10 && $a<50)
                {
                $this->age=$a;
                }
            }
            function GetAge($a) 
            {
                if($a>10 && $a<50)
                {
                $this->age=$a;
                }
            }*/
            
            function __set($name,$value) //对类里面的私有成员进行赋值的魔术方法
            {
                $this-> $name=$value;
                if($name=="age" && $value>20 && $value<50)
                {
                $this->age=$a;
                }
            
            }
            function __get($Name) //对类里面的私有成员进行取值的魔术方法
            {
                return $this->$Name;
            }
        }
    //使用类
    //1.实例化对象
        $r=new Ren("男");
    //2.给成员变量赋值(调用成员变量)
        $r->Name='张良';//给对象的name赋值
        //var_dump($r);
    //3.调用成员方法
        $r->Run();//执行成员方法
    //访问修饰符
    //1.如果要加访问修饰符,要去掉var
    //2.三种:public公有的,protected受保护的,private私有的 
    //3.如果不加访问修饰符,默认是共有的
        
    //$this引用
        $r->Say();
    //$this表示该对象(哪个对象调用)    ,不是代表该类
        
    //构造函数
        //function__construct()
        //{
        //}
    //1,写法特殊
    //2.执行特殊,再造对象时自动执行
    //作用:对对象做初始化操作
    
    //面向对象三大特性 
    //封装,让类更加安全
    //做法:1.把成员变量变成私有的
    //2.做一个方法来实现变量的取值和赋值,加一些限制条件
    $r->SetAge(40); 
    //取age值的方法
    echo $r->GetAge();
    //使用魔术方法
    $r->name ="李思";//执行该语句会自动调用__set方法
    //__set() 特点:会自动执行,把赋值语句中的变量名作为第一个参数,把变量值作为第二个参数调用__set方法
    //__get() 特点:会自动执行,把取值语句中的变量名作为参数调用__get方法
    
    //继承
    //概念:如果一个类有子类,那么该子类会继承父类的一切东西(不包括私有成员)
    //在定义子类的时候需要加一个关键字 extends
    //特点:单继承,一个儿子只能有一个父亲,一个类只能一个父类
        //如果父类中有构造函数,子类在实例化的时候要按父类构造函数的标准来实例化
    //子类对父类的方法的重写,在子类里写一个同样的方法
    //final:用来修饰类,代表该类是一个最终类,该类无法被继承
    class Test extends Ren
    {
        
        public $birthday;
        function Run()
        {
            echo "running";
        }
        function Say() 
        {
            parent::Say();//调用父类的Say()方法,parent只能在子类中使用
            echo "saying";
        }
    }
    
    $t=new Test("女");
    $t->__get();
    $t->Say();
    //静态成员
    //普通成员是属于对象的,不是属于类的 (调用的时候是用对象调用)
    //什么叫静态的:类静态成员是属于类的,不是属于每个对象的
    //定义静态成员用static关键词修饰
    //静态方法里面不能调用普通成员
    //静态方法调用静态成员,要使用self关键词
    //self表示该类 $this表示该对象
    //普通方法里面可以调用静态成员
    Ren::$class="0305";//访问静态成员
    echo Ren::$class="0305";
    
    //多态
    //概念:当父类引用指向子类实例的时候,由于子类对父类函数进行了重置,导致我们在使用该引用去调用相应的方法表现出的不同
    //条件:必须有继承
    //2.子类必须对父类的方法进行重写 
    
    class Rene
    {
        public $name;
        public $sex;
        function Say()
        {
            echo "你好a ";
        }
        function Say($a)
        {
            echo $a."你好a ";
        }
        function Say($a,$b)
        {
            echo $a.$b."你好a ";
        }
        function __tostring()//输出类的描述
        {
            return "这个对象包括变量name和sex,一个say方法";
        }
        function __clone()//克隆对象时自动执行
        {
            $this->name="事发后";//this 指副本 (克隆出来的新对象)
        }
    }
    class China extends Rene
    {
        function Say()
        {
            echo "你好";
        }
    }
    
    $q=new Rene();
    $q1=new China();
    
    //函数重载 
    //2.函数里面参数的个数不同
    //3.如果个数相同,类型不同
    $r=new Rene();
    $r->Say();
    
    //PHP是弱类型语言,所以没有重载
    //PHP有可变参数的函数
    
    //__tostring()
    
    //对象的克隆 
    $r=new Rene();
    $r->name="福建";
    
    $r1=clone $r;//克隆对象
    echo $r->name;
    echo $r1->name;
    
    var_dump($r1);
    
    
    
    
    
    ?>
      
  • 相关阅读:
    top-cpu
    长连接&短连接分析
    HTTP协议详解(头报文)
    exit 与 return 区别
    TOP K 算法
    海量数据处理(面试题&总结)
    SpringBoot和VW-Crawler抓取csdn的文章
    maven项目-修复Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:build-helper-maven-plugin:1.8:add-resource (execution: add-resource, phase: generate-resources) pom.xml报错
    模拟ios应用加载页面
    HTML表格布局
  • 原文地址:https://www.cnblogs.com/zhaimiaoer/p/5477044.html
Copyright © 2011-2022 走看看