• php学习14 ---初探面向对象


      从今天开始我们开始学习面向对象的思想。

    一、面向对象编程思想的介绍

      1.面向过程编程

        面向过程的编程就是将任务分割成若干个步奏一步一步的进行下去,当每一步都完成了之后,任务就算完成了。

          

      2.面向对象编程

        面向对象的编程思想(oop),其基本的特征就是将不同的任务交给不同的对象去做,每个对象的有自己的方法和属性,我们不用关心他完成的内部机制,只管让他去做就行可以了,每个对象都有自己的职责,相互配合完成任务。

          

    二、面向对象的基本概念

      1.类和对象

        对象:万物皆对象;

        类:任何对象,都可以人为“规定”为某种类型;

        php中的类:

            class  Person{

              var  $name;

              var  $age;

              var  $edu;

            }

            class  Teacher{

              var $name;

              var $age;

              var  $edu;

              var  $major;

            }

          

          

        由此可以见:

          类是描述一类事物的总称,是具有相同特性的该类事物的一个总称;

          对象是一个明确的具体的物体,是类中的某一个实例,对象离不开类,对象一定隶属于类,一定先有类再有对象。

      2.属性和方法

        属性:就是一样来的‘变量’,只是它现在隶属于一个类了,即写在一个类中,就称为属性。

        方法:就是原来“函数”,只是它现在隶属于一个类了,就称为方法。

        注意:

          属性和方法,他个函数有一定的区别了,不能‘自由使用’了,而是通过这个类或这个类的对象去使用它。

          使用属性的时候,把它当做变量去使用就好了,只是变了一下形式:对象->属性名;

          使用方法,就把它当做一个‘函数’去使用,形式也要改一下:对象->方法;

          

          一个类定义了一些属性和方法,则这个类所创建出来的对象也就自然有了这些属性和方法;

      3.创建对象的几种形式

        创建对象有以下几种方式;

          

      4.对象的传值方式

        对于对象,值传递和引用传值方式对对象的数据的改变的结果是一样的。

        那么为什么对于对象,值传递和引用传递,几乎没有区别?这要从对象的数据的存储方式来理解了:

        $o1 = newC1();//这里创建了一个对象o1,其存储结果如图:

          

        这里,实际上,变量$o1中,存储的数据只是一个‘对象编号#1’,这个对象编号,才会去指向对象数据new c1();该编号数据,我们不能控制,只能是系统内部的分配。

        则$o2 = $o1 ;作为值传递,实际是复制了该对象的编号:

          

        在语法上,对对象变量进行的属性操作,其实就是通过该编号来指向对象而操作的。

        $o1->p 2 ;//此时,就是通过对象编号#1区修改了对象(new C1())的内部数据。

        echo $o2->;//此时相当于取得变量$o2所包含的编号#1中所指向的对象(new C1();)的内部数据p1;

        那么对于引用传递,情况如下:

        $o3 = new C1();//创建一个对象:

          

        $o4 = &$o3;//引用传递:

          

        所以:

          $o3->p = 2;

          echo $o4->p;//输出2

    三、类中的成员

      1.类中成员的概述

        面向对象编程,是需要通过“对象”去做什么事情(以完成某件任务),而对象总是来源于类,所以,面向对象编程,一切都是从定义类开始;

        类中成员分为3大类:

            常量,属性,方法

        形式上,大致如下:  

            class  类名{

              常量定义;

              属性定义;

              方法定义;

            }

        说明:

          以上各项,没有顺序问题,习惯上是常量,属性,方法的顺序来写;

        再详细一点分的话:

          属性:普通属性    静态属性

          方法:普通方法   静态方法  构造方法   析构方法

      2.类常量

        当一个类中定义一个常量时,该常量就称为类常量--其本质还是常量;

        class 类名{

          const  常量名 = 常量值; //  不可以是用define()来定义;

        }

        常量的使用,是通过类名,并使用范围解析符(::)来取用的;

           类名::常量名;

        举例:

          

      3.普通属性(实例属性)

        实例的单词为:instance;实例其实就是对象,普通属性,就是一个可以在该类实例化出的对象上使用的属性!

        class 类名{

          var $属性名 = 属性值;

          var $属性名;

          //上面的var 也可以用public来代替;

          public $属性名 = 属性值;

          public $属性名;

        }

        普通属性的使用方法:

          $对象->属性名;

          因为,属性的本质就是变量,所以可以当做变量来看待;

      4.静态属性

        静态属性,本质上也是“变量”,但其有一个特点:该变量只隶属于“类”,即:一个类中的静态属性,就只有“一份数据”,但,一个类的实例属性,就可以有多分数据----每创建一个对象出来,就会有一份数据;

          class  类名{

          static  $属性名 = 初始值;

          static  $属性名;  //此属性没有初始值;

          }  

        静态属性的使用方法和常量的使用差不多都需要范围解析符来操作:

          类名::$静态属性名;  //属性名带$符号

        举例:

          

        可见:

          实例属性,是每个对象都可以不一样的数据,也只是没有对象独自拥有的数据;  

          静态属性,它不属于任何一个对象,而只属于该类本身,也可以理解为所有的对象共有的数据;

      5.普通方法

        一个类中定义的方法,可以为这个类的所有对象调用的方法,也可以理解为,这个类的所有对象,都有各自的方法;

        class  类名{

          function 方法名(形参1,形参2...){...}

        }

        调用形式;

          $对象名->方法名(实参1,实参2,...)

      6.静态方法

        一个类中定义的方法,只隶属于这个类本身,而不是隶属于这个类的对象。

        定义形式:

          class  类名{

            static function 方法名(形参1,形参2...){...}

          }

        调用形式:

          类名::方法名(实参1,实参2...)

        举例:

          

           

      7.构造方法

        构造方法,就是一个特殊的方法:

          其名字是固定的:__construct;

          该方式通常不要我们自己调用,而是在new一个对象的收会自动调用

          该方法主要的目的是为了在new一个对象的时候,给该对象设置一些初始值;

          构造方法的参数没有规定,通常是根据实际的需要来定义,目的是为了对象属性数据的初始化;

          

          以上这种方式,对对象的属性的数据初始化不太方便,我么可以利用构造方法来改进:

          

      8.析构方法

        析构方法是一个特殊的方法,名字为固定的词:__desctuct;

        析构方法是一个在对象被销毁的时候自动调用的方法--我们无法调用它;

        析构方法不能带参数,但方法中也可以使用$this这个词,代表当前对象;

          

        对象在哪些情况下会被销毁

        1.如果程序结束,所有的变量都会被销毁,自然,变量所代表的对象也会被销毁;

        2.当一个对象没有任何变量指向的它时候,即使程序还没结束,也会被销毁;

          

          

  • 相关阅读:
    bs4抓取糗事百科
    数据结构(复习排序算法)——选泡插(选择,冒泡,插入,希尔)
    Hive-ha (十三)
    Hive优化(十一)
    Hive压缩和存储(十二)
    Hive权限管理(十)
    Hive的视图和索引(九)
    Hive动态分区和分桶(八)
    Hive(七)Hive参数操作和运行方式
    Redis 基础
  • 原文地址:https://www.cnblogs.com/pzp-fire/p/5893258.html
Copyright © 2020-2023  润新知