• 面向对象知识点


    面向对象基本概念
    类:是用于描述“某一些具有共同特征”的物体的概念,是某一类物体的总称。
    通常,一个类所具有的共同特征包括2大方面的信息:
    外观,形状,描述,数据。。。。。属性
    行为,动作,功能。。。。。。。。方法。
    对象:是指一个具体的“物体”,该物体隶属于某个“类别”(类)。
    通常,对象离不开类,没有类,就不能有对象。
    在面向过程的语法中,我们的代码有如下几种代码:
      定义变量;
      定义函数;
      使用变量(输出,赋值,等)
      调用函数;
      流程控制(if,switch,for,while等)
      在面向对象的语法中,则情况就发生变化了:
    1,定义类;
      1.1定义属性(变量)
      1.2定义方法(函数)
      1.3定义常量(类常量)
    2,创建类的对象;
      $对象名=new 类名();
    3,使用对象;
      3.1使用其属性:因为属性就是“变量”,则使用其属性,也就是跟以前使用变量一样。
      3.2使用其方法:因为方法就是“函数”,则使用其方法,也就是跟以前使用函数一样。
      3.3使用其常量:类似使用以前的普通常量。

    对象创建的基本形式
    方式1:
      $对象名1 = new 类名(); //对象名就是变量名;类是应该定义过了
    方式2:
      $对象名2 = new self; //self指代类本身,这行代码只能在类内部方法中使用。

    对象的传值
    php中,变量传值方式有2个:
    值传递:传递的时候,拷贝的是数据本身。默认都是值传递。
    结果:传递完之后,有了2份同样的数据,但两个变量“相互独立”没有关系。
    引用传递: 传递的时候,拷贝的是引用关系。需要使用“&”才能实现引用传递。
    结果:传递完之后,数据仍然只有一份,但是两个变量共同指向该数据。

    在面向对象这个层面,基本来说,仍然如此:
      默认是值传递:
      可以使用引用传递:
    先观察一个现象:

    1 <?php
    2 class p{
    3   var $v1=10;      
    4 }
    5 $p1=new p();
    6 $p2=$p1;
    7 $p1->v1=20;
    8 echo "<br>p1->v1为:".$p1->v1;//20
    9 echo "<br>p2->v1为:".$p2->v1;//20
    View Code

    为什么值传递$p1的值改了$p2也改了?
    原来,对象的存储跟普通变量的存储有所区别:
    $p1并不是具体的值而是一个对象,面向对象并不是复制一份数据而是复制了一份对象标识符 所以$p2会随着$p1值的改变而改变


    引用传递:
    复制的是引用关系。


    类中成员
    一个类的内部可以有3种代码:
      属性
      方法
      类常量
    它们统称为“类中成员”。

    一般属性
    属性就是放在一个类中的变量。
    定义形式:
      形式1: var $v1 ; //定义不赋值
      形式2: var $v2 = 2; //定义的同时可以赋值,该值只能是“直接值”,常量(值)
    //不能是变量值,也不能是“计算表达式”
      形式3: public $v1;
      形式4: public $2 = 2; //其实var是“public”一个别名,正式用public更好。
    错误形式:
      $v1 = 1;
      var $v2 = 1+3; //右边不能是计算表达式
      public $v3 = $v2; //右边不能是变量
    使用形式
      $对象->属性名; //注意:属性名前面没有$符号
    一般方法
      使用是通过类或类的对象来进行的。
      方法前可以加修饰词:public,proctected,private,省略就算“public”

    方法中$this关键字
      $this是一个“伪对象”,代表当前所属类的当前对象。

    一些简单说法:
    类是定义好的某些对象的“模板/模型”
    对象是根据该模板/模型所“创建”出来的具体物体
    一个对象可以有哪些属性(数据),是由该类来决定的。
    一个对象可以做那些事情(方法),也是由该类来决定。
    通常认为,一个类(对象),就是拥有一些数据,并通过它自己的方法可以去处理这些数据的“独立体”

    一个系统函数:get_class(对象) 
    作用:获得某个对象的“所属类名”——结果只是一个类名字符串。
    $class_name = get_class($p1); //结果可能是:”Person”

    静态属性
      在定义属性的时候,前面加上关键字:static,此时就是静态属性。
    静态属性有什么用?
      对比来说:一般属性,他的值是隶属于该类的具体某个对象(虽然定义在类中),或者说,每个对象的同样的属性的值,有可能不一样。
      静态属性就是:只隶属于类本身——也可以看做是所有对象的“共有数据”。
    静态属性的使用:
    通过特殊的语法:::(双冒号语法,也叫范围解释符)
      类::$静态属性名;
    对比普通属性的使用:
    对象->普通属性名;   //普通属性也可以叫做“实例属性”,相应的,对象也叫“实例”

    静态方法
    如果在一个方法的前面加上static关键字修饰,则就变成了静态方法。
    静态方法同样隶属于类,而不是隶属于具体对象。使用方法跟静态属性类似:
      类名::静态方法名();
        从理念上,可以认为,静态方法是只隶属于类,而为所有对象所“共有”。
        如果通过类名来调用静态方法,则该方法中不可以出现$this关键字
    注意1:$this在静态方法中不能使用。
    静态方法中不应调用非静态方法。

    self:含义:代表当前类
    使用:通常只能在某个类的某个方法内部代表该类的名称。

    构造方法:
    构造方式是类中的一个“特殊”方法,其作用是在实例化一个对象的同时,给该对象的属性赋值,使之一创建完成,就具有了其本身的特有数据(属性值)。
      1,该方法名字是固定的,为:_ _construct();注意:两个下划线
      2,该方法必须是普通方法(不能是静态方法)
      3,通常该方法应该是public
      4,通常该方法中使用$this这个关键字来对属性进行赋值
      5,当new 类名()的时候,其实是在调用该构造方法
      6,如果一个类中定义了构造方法,则实例化该类时就会调用该方法,且实例化时的参数需要跟构造方法的参数匹配

    析构方法
    构造方法是“创建”对象的时候会自动调用。
    析构方法是“销毁”对象的时候会自动调用。
    系统方法通常用于在销毁对象的时候来“清理数据”(打扫战场)——如果需要,就可以利用这个机会去处理。
    通常,php程序结束后,所有对象都会自动销毁(其实属于php内部的垃圾回收机制)

    说明:
      1,析构方法通常不太需要去定义。
      2,析构方法不能调用。
      3,析构方法不能有形参。
      4,析构方法中可以用于清理一些在php代码结束后不能清理的数据,如生成的文件。
     对象销毁的几个情形:
        1.脚本程序运行结束,自动销毁;
        2.明确地unset()一个对象变量,则被销毁;
        3.改变对象变量的值,被销毁;
    实际上,更本质来说,当一个对象(new 出来的对象)没有任何一个变量指向它的时候,该对象就会被自动销毁——自然,如果整个程序结束,也会销毁。

  • 相关阅读:
    【Netty学习】 ChannelInitializer 学习
    【Netty学习】Netty 4.0.x版本和Flex 4.6配合
    Spring框架学习
    【JS教程23】jquery链式调用
    【JS教程22】jquery特殊效果
    【JS教程21】数组及操作方法
    【JS教程20】jquery动画
    【JS教程19】jquery绑定click事件
    【JS教程18】jquery样式操作
    【JS教程17】jquery选择器
  • 原文地址:https://www.cnblogs.com/1301694f/p/8512122.html
Copyright © 2020-2023  润新知