面向过程、面向对象

  面向过程:从开始到结束自己独立完成

  面向对象:将一个事物划分为单体来各自实现区域性的功能,最后通过调用组合完成

类、对象

  类:某一些具有共同特征的物体

  对象:指某一种具体的物体,属于某一个类


类成员(成员属性,成员方法)

  类里面只包括属性和方法

  使用属性的格式为:$对象->属性名(属性名前不加$符号)

  方法直接在类里面定义


静态属性、静态方法

  在定义属性的时候,前面加上static就是静态属性,只属于类本身

  静态属性的使用:类 :: $静态属性名(::双冒号)

  静态方法也是只属于类,不属于具体对象

  静态方法中不能掉用非静态方法

  静态方法的使用:类名 :: $静态方法名(::双冒号)

  如果通过类名来调用静态方法,不能出现$this关键字


构造__construct()、析构方法__destruct()

插入一个对象的同时,也给这个对象赋值,然后本身就会有属性值,可以在本类内调用

例:

class Teacher{

   public $name="匿名";

   public $age="未知";

    public $eduction="未知";

   function  _ _construct($name,$age,$eduction){

    $this->name=$name;

     $this->age=$age;

     $this->eduction=$eduction;

     }

    function showAllInfo(){

    echo"<br/>hi,大家好,我叫".$this->name;

    echo"<br/>今年".$this->age."岁";

      echo "<br/>学历:".$this->eduction;

   }

}

$teacher1=new Teacher("张三",22,"本科");

$teacher2=new Teacher("李四",23,"研究生");

$teacher1->showAllInfo();

echo "<br>";

$teacher2->showAllInfo();
  1,该方法名字是固定的,为:_ _construct();注意:两个下划线
  2,该方法必须是普通方法(不能是静态方法)
  3,通常该方法应该是public
  4,通常该方法中使用$this这个关键字来对属性进行赋值
  5,当new 类名()的时候,其实是在调用该构造方法
  6,在一个类中有构造方法,那么在本类的方法中就会调用构造方法中的值

构造 方法是“创建”对象的时候会自动调用。

析构 方法是“销毁”对象的时候会自动调用。

说明:

  1,析构方法通常不太需要去定义。

  2,析构方法不能调用。

  3,析构方法不能有形参。

  4,析构方法中可以用于清理一些在php代码结束后不能清理的数据,如生成的文件。

 对象销毁的几个情形:

脚本程序运行结束,自动销毁;

明确地unset()一个对象变量,则被销毁;

改变对象变量的值,被销毁;

$this、self、parent

$this:$this是一个“伪对象”,代表当前所属类的当前对象。

Self:含义:代表当前类

只能在某个类的方法里代表该类的名称

Class S{

  Public $v=1;

  Static funcation new(){

    Return new self;//self代表当前类

    //new self 代表当前类的一个对象

  }

}

$obj = S::new(); //通过s的静态方法得到当前类的一个新对象

Var_dump($obj);

Parent:代表父类

一般用于子类调用父类内容时使用,通常使用父类的静态类

class C{

  public $p1 = 1;

  function showMe(){

    echo "<br />我是父类,数据有:";

    echo "<br />C中p1=" . $this->p1;

  }

  function _ _construct($p1){

    $this->p1 = $p1;

  }

}

class D extends C{

  public $p2 = 2;

  function __construct($p1,$p2){

    //经典用法

    parent::__construct($p1);//调用父类的构造函数来初始化p1

    $this->p2 = $p2; //初始化p2

}

function showMe2(){

  echo "<br />我是子类,数据有:";

  //基本用法:

  parent::showMe();//调用父类的showMe方法,  使用静态方法调用

  echo "<br />D中p2=" . $this->p2;

  }

}

$d1 = new D(10,20); //此时就需要尊照构造函数的参数结构来使用

$d1->showMe2();


public、protected、private、static

public:公共的(只要在文档中都可以用)一般用于设置变量

protected:受保护的(可以在当前类或当前类的上下级具有继承关系的类中访问)

private:私有的(只能在当前类中使用)

extends :继承 (子类继续父类)

Static:静态

重写、重载__set()__get()__isset()__unset()

所谓属性重载,就是在面对上述4种情形的属性使用场景中,该对象如果来“应对”的问题。

如果某属性不存在,但在语法中使用如下情形,则会发生:

  都称之为:魔术方法“”

    取值:$v1 = 对象->属性; ===>自动调用类中的__get()方法

    赋值:对象->属性 = XX值; ===>自动调用类中的__set()方法

    判断是否存在:isset(对象->属性;) ===>自动调用类中的__isset()方法

    销毁:unset(对象->属性;) ===>自动调用类中的__unset()方法

重写关键字:override

例子:

class C{

  function show1($para1){

  echo "<br />父类的show1方法:para1 = " . $para1;

  }

}

class D extends C{

  function show1($para, $para2){//参数不一致

  echo "<br />子类的show1方法";

  }

}

在继承关系中使用,可以节约代码

重载方法

在一个类中,有多个同名的方法,每个方法的参数不同而已。这种现象就称为“重载”

参数不同可以是:数量个数不同,或类型不同,或顺序不同

例子

class  A{

  int  function  f1(int  x){......}

  int  function  f1(int  x,  int  y){.....}

  int  function  f1(string s   int  m){....}

}

在PHP中重载只是一个概念


__call() __callStatic() __clone()

方法重载关键字:__call

例子:

Function f1(){

  Echo :”f1被调用”

}

Function f2($x,$y){

  echo :”f2被调用”;

  return $x+$y;

}

Class a{

  Public $p1=1;

  Function __call($x,$arr){

    $c=count($array);

    If($c==0){

      F1();

    }else if(){

      Return f2($arr[0],$arr[1]);

    }

  }

}

$d=new a();

$d->f1();

$v1=$d->f1(1,2)//f1不存在两个参数

echo "<br />d1里面的p1=" . $d1->p1;

echo "<br />结果v1=" . $v1;

执行结果
f1被调用
f1被调用

o1里面的p1=1
结果v1=3

一个对象还可以使用clone运算符进行克隆,则就也会“生成”新对象。

当使用一个对象(类)调用一个不存在的静态方法的时候,会自动去调用预先定义好的"__callStatic"方法。(该方法必须带2个参数

 


extends、abstract

  Extends:子类继承父类

  Abstract:抽象类

  在正常定义类的前面,加上关键字:abstract,那就构成抽象类。

  abstract  class  类名{.....类的定义.....}

  接口interface

单例:
1、私有属性(值是对象)
2、私有构造方法(不能new)
3、提供获取对象的方法(这里面判断是否存在)
4、私有克隆

面向对象三大特性:封装、继承、多态

工厂模式

class factory{

  //Instance表示“实例”,“对象”

  static function getInstance($className){

    if(file_exists('./class/' . $className . ".class.php")){

    $obj1 = new $className();

    return $obj1;

    }else{

      return null;//也可以die();

    }

  }

}

$obj1 = factory::getInstance("A");//获取类A的一个对象

$obj2 = factory::getInstance("B");//获取类B的一个对象

$obj3 = factory::getInstance("A");//再获取类A的一个对象

优点:只需要指定对象就可以创建

最终类final class:

通常,一个类,没有特别声明的话,则“别人”就可以随意拿过来使用并对之进行“扩展”——继承。

但是:

如果某个类不希望对其进行扩展,则可以将其声明为“最终类”。

形式:

  final  class  类名{ 。。。。类定义。。。。}

最终方法final method

通常,一个方法,如果没有特别声明,则下级类就可以对其进行“覆盖”(重写)。

但是:

  如果某个方法不希望被下级类覆盖,就可以对其生命为“最终方法”。

形式:

  final  function  方法名(){。。。。方法定义。。。。}

转载于:https://www.cnblogs.com/1301694f/p/8519707.html

面向对象、继承、抽象方法重载知识点整理相关推荐

  1. 笔记整理3----Java语言高级(三)11 综合练习+12 面向对象-static变量 与 代码块+13 面向对象-继承与抽象类+14 面向对象-接口与多态+15 面向对象-包修饰符

    11 综合练习+12 面向对象-static变量 与 代码块+13 面向对象-继承与抽象类+14 面向对象-接口与多态+15 面向对象-包&修饰符 第11天 综合练习 今日内容介绍 综合练习 ...

  2. Java面向对象8——抽象类和抽象方法(知识点+使用方法)

    抽象类和抽象方法 一.前言 二.抽象方法 1.定义 2.简单记忆方法 3.代码格式 4.使用说明 三.抽象类 1.定义 2.代码格式 3.使用说明 4.注意点 四.小练习 1.题目 2.分析 3.代码 ...

  3. Java基础知识点整理(2022年最新版)

    看了网上很多关于Java基础知识点整理的文章,但是感觉都不是很好,要么不全面,要么不准确,要么排版太乱了,所以今天整理了一份Java基础知识点整理(2022年最新版),希望对大家有帮助哈~ 由于本文篇 ...

  4. 知识点整理,Java基础面试题(一)

    写在前面 整理了一些互联网大厂的面试题,这些面试题经常会被问到,也是作为Java工程师需要掌握的一些知识点,毕竟理论和实践的结合,才是王道,分片整理,每天嗑些知识点,快乐每一天,如果对你有帮助,记得点 ...

  5. java重要基础知识点_java基础知识点整理

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 java基础知识点整理1.&和&&的区别? &:逻辑与(and),运算符两边的表达式均为true时,整个结果才为true. ...

  6. 百度 java基础_java基础知识点整理

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 java基础知识点整理1.&和&&的区别? &:逻辑与(and),运算符两边的表达式均为true时,整个结果才为true. ...

  7. 软考高级系统分析师知识点整理

    系统分析师知识点整理 信息化战略体系 企业战略规划:企业如何达到目标 信息系统战略规划:信息系统如何支撑这些目标 信息技术战略规划(IT战略规划):需要哪些信息技术支撑信息系统 信息资源规划:信息化建 ...

  8. 06-JAVA面试核心知识点整理(时间较多的同学全面复习)

    JVM (1) 基本概念: JVM是可运行Java代码的假想计算机 ,包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收,堆 和 一个存储方法域.JVM 是运行在操作系统之上的,它与硬件没有直接的 ...

  9. 大数据——Java 知识点整理

    1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java开发工具包,提供了java的开发环境和运行环境. JRE:Java Runtime Envir ...

最新文章

  1. sql语句 case
  2. Python Challenge-Level 1
  3. Solr调优参考-续
  4. 使用Redis存储Nginx+Tomcat负载均衡集群的Session
  5. 一个Java递归删除目录的方法
  6. 在不同浏览器中,input里面的输入光标大小表现形式却大不相同
  7. 用PHP的CURL写的一个采集Discuz的例子
  8. ubuntu16.04下FSA-Net环境安装和训练
  9. 伊万卡·特朗普的迈阿密豪华公寓楼接受加密付款
  10. jquery.validator验证后ajax提交出现错误解决
  11. bcm94352屏蔽第20针脚图_iOS13屏蔽系统更新教程-【转载】
  12. 2009年下半年 系统集成项目管理工程师 下午试卷
  13. 苗圩:5G技术将八成用于移动物联网 年内适时发放5G牌照
  14. DSN格式转SCH格式
  15. [SSL_CHX][2021-8-20]最大质因子序列
  16. java import imageio_是否可以使用Java ImageIO从InputStream读取多个...
  17. arcpy投影(二)——基准面变换概念及参数、空间参考对象获取、变换关系获取方法梳理与解析(Spatial Reference、ListTransformations)
  18. 电动汽车基于Origin的数据分析
  19. 物流(Logistics)的概念
  20. Python之绘制个人足迹地图

热门文章

  1. java语言50到100之间素数和_用JAVA语言编写一程序,求100以内的所有素数
  2. cad常用字体包_CAD制图初学入门如何学好CAD?CAD大神总结5点诀窍,必须收藏
  3. acer软件保护卡清除工具clear_使用Windows 10内置工具释放硬盘空间的最佳方法
  4. python开源项目新手_10大Python开源项目推荐(Github平均star2135)
  5. python外星人入侵怎么发给别人_python_外星人入侵(1-1)
  6. java程序员面试怎么难为面试官_Java程序员面试这些多线程问题你知道吗?
  7. php mysql bootstart_PHP MySQL 创建数据库
  8. 石家庄计算机专接本学校有哪些,河北省内的专接本学校都有哪些?
  9. golang mysql封装_自己封装的golang 操作数据库方法
  10. clion 引用dll_用CLion实现本地方法并给java调用