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

面向过程、面向对象

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

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

类、对象

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

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


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

  类里面只包括属性和方法

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

  方法直接在类里面定义


静态属性、静态方法

  在定义属性的时候,前面加上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()一个对象变量,则被销毁;

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

 

 

$thisselfparent

$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 />Cp1=" . $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 />Dp2=" . $this->p2;

  }

}

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

$d1->showMe2();


publicprotectedprivatestatic

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个参数

 


extendsabstract

  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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python for循环n次_Python入门10 —— for循环

1.字符串依次取值 students [egon, lxx, alex] i 0 while i < 3: print(students[i]) i 1 2.针对循环取值操作&#xff0c;while循环并不擅长&#xff0c;于是python提供一个专门循环取值操作&#xff1a;for循环 students [egon, lxx, alex] for x in students: # 有几…

hive与依赖环境的交互

与linux交互命令 格式 在linux的命令前加上!&#xff08;英文感叹号&#xff09;&#xff0c;以;&#xff08;英文分号结尾&#xff09; 操作实例 !ls; !pwd; hive> !ls; app derby.log hadoop-2.7.2.tar.gz jdk-8u73-linux-x64.tar.gz metastore_db t.sql hive> !pw…

和平精英显示服务器人数太多,和平精英到底有多差 导致玩家纷纷国际服

原标题&#xff1a;和平精英到底有多差 导致玩家纷纷国际服和平精英上线以来争议不断&#xff0c;百分之九十九是对和平精英的各种不满&#xff0c;还有百分之一是喜欢和平精英&#xff0c;认为刺激战场已经免费给我们玩&#xff0c;让腾讯亏了很多钱&#xff0c;现在和平精英上…

python中的wx_配置 Python的wxWidgets可视开发环境 | 学步园

注&#xff1a;转载请注明出处 一、下载 Python 2.5.1 这一步是必须做的&#xff0c;下载 Python 语言的 SDK 下载地址(直接复制到迅雷)&#xff1a;点击下载 下载完成后安装 Python 2.5.1&#xff0c;注意安装路径中不要有空格&#xff0c;不然会引起一些问题。 二、下载 wxPy…

的write方法有哪些参数_向子进程传递大量数据的方法

如何传递大型数据给子进程昨天的一篇文章中&#xff0c;我们说到如果想向一个子进程传输多于32767个字符的数据&#xff0c;我们需要寻找其他的方法(而不是命令行参数)来实现。我们能想到的第一个方法是&#xff1a;WM_COPYDATA。当子进程创建并进入消息循环后&#xff0c;我们…

厉害了!中关村软件园人工智能军团有料有看点

人工智能已成为当下全球科技界的新热点&#xff0c;中外竞相攀登这座划时代的科技高峰。上月&#xff0c;国务院印发《新一代人工智能发展规划》&#xff0c;明确将人工智能作为未来国家重要的发展战略。《规划》提出前瞻布局新一代人工智能重大科技项目&#xff0c;到2030年中…

Hive的使用之hwi

概述 hwi是hive开发的网页形式查看数据。方便非专业人士使用。 安装步骤 1、下载hive源码包 地址&#xff1a;http://apache.fayea.com/hive/ apache-hive-2.1.0-src.tar.gz 2、打包war 解压apache-hive-2.1.0-src.tar.gz源码包&#xff0c;进入到 C:\Users\zengmg\Deskto…

c 服务器传输大文件,cend.me:不须经过服务器,直接点对点的文件传输免费服务...

要传送文件给远程的手机、平板、电脑等设备&#xff0c;通常的做法就是先将文件上传到服务器存放&#xff0c;然后再从服务器下载&#xff0c;这样的做法看似合理&#xff0c;但如果上传的同时就由远程的设备来接收&#xff0c;不要经过服务器&#xff0c;这样就能更节省上、下…

win10系统迁移后系统重装_win7/win10系统迁移到新SSD硬盘的方法

随着固态硬盘的普及&#xff0c;越来越多的朋友把电脑的硬盘换成了固态&#xff0c;原来的机械硬盘当数据盘使用&#xff0c;关于在固态硬盘中安装系统&#xff0c;那是简单的&#xff0c;和机械硬盘一样&#xff0c;当是对原来的系统比较重要&#xff0c;不能重装的朋友来说&a…

hive参数配置使用

概述 set命令设置hive的参数。 ${} 可以获取配置项的值&#xff0c;作为参数使用。 在启动hive时可以传入配置项启动。 hive参数初始化配置set命令~/.hiverc hive参数介绍 输入set&#xff0c;可以查看所有可设置项和现在设置项的值。 hive> set; 项太多了&#xff…

Thrift源码学习二——Server层

Thrift 提供了如图五种模式&#xff1a;TSimpleServer、TNonblockingServer、THsHaServer、TThreadPoolServer、TThreadSelectorServer ​​ TSimpleServer、TThreadPoolServer 属于阻塞模型 TNonblockingServer、THsHaServer、TThreadedSelectorServer 属于非阻塞模型 TServer…

linux top 命令可视化_25个Linux性能监控工具

一段时间以来&#xff0c;我们在网上向读者介绍了如何为Linux以及类Linux操作系统配置多种不同的性能监控工具。在这篇文章中我们将罗列一系列使用最频繁的性能监控工具&#xff0c;并对介绍到的每一个工具提供了相应的简介链接&#xff0c;大致将其划分为两类&#xff0c;基于…

base64是哪个jar包的_涨知识 | 用maven轻松管理jar包

前言相信只要做过 Java 开发的童鞋们&#xff0c;对 Ant 想必都不陌生&#xff0c;我们往往使用 Ant 来构建项目&#xff0c;尤其是涉及到特别繁杂的工作量&#xff0c;一个 build.xml 能够完成编译、测试、打包、部署等很多任务&#xff0c;这在很大的程度上解放了程序员们的双…

Hive数据类型

概述 Hive的内置数据类型可以分为两大类&#xff1a;(1)、基础数据类型&#xff1b;(2)、复杂数据类型。 基础数据类型 数据类型 所占字节 开始支持版本 TINYINT 1byte&#xff0c;-128 ~ 127 SMALLINT 2byte&#xff0c;-32,768 ~ 32,767 INT 4byte,-2,147,483,648 ~ 2,14…

JMS(Java消息服务)与消息队列ActiveMQ基本使用(一)

最近的项目中用到了mq&#xff0c;之前自己一直在码农一样的照葫芦画瓢。最近几天研究了下&#xff0c;把自己所有看下来的文档和了解总结一下。 一. 认识JMS 1.概述 对于JMS,百度百科&#xff0c;是这样介绍的&#xff1a;JMS即Java消息服务&#xff08;Java Message Service&…

python单词反转_python文本 字符串逐字符反转以及逐单词反转

python文本 字符串逐字符反转以及逐单词反转 场景&#xff1a; 字符串逐字符反转以及逐单词反转 首先来看字符串逐字符反转&#xff0c;由于python提供了非常有用的切片&#xff0c;所以只需要一句就可以搞定了 >>> aabc edf degd >>> a[::-1] dged fde cba …

hive复合数据类型之struct

概述 STRUCT&#xff1a;STRUCT可以包含不同数据类型的元素。这些元素可以通过”点语法”的方式来得到所需要的元素&#xff0c;比如user是一个STRUCT类型&#xff0c;那么可以通过user.address得到这个用户的地址。 操作实例 1、创建表 create table student_test(id int,in…

pycharm 运行celery_Celery全面学习笔记

来源介绍Celery 是 Distributed Task Queue&#xff0c;分布式任务队列。分布式决定了可以有多个 worker 的存在&#xff0c;队列表示其是异步操作。Celery 核心模块Celery有一下5个核心角色Task就是任务&#xff0c;有异步任务和定时任务Broker中间人&#xff0c;接收生产者发…

hive复合数据类型之array

概述 ARRAY&#xff1a;ARRAY类型是由一系列相同数据类型的元素组成&#xff0c;这些元素可以通过下标来访问。比如有一个ARRAY类型的变量fruits&#xff0c;它是由[apple,orange,mango]组成&#xff0c;那么我们可以通过fruits[1]来访问元素orange&#xff0c;因为ARRAY类型的…

Exploit开发系列教程-Mona 2 SEH

P3nro5e 2015/07/10 10:580x00 Mona 2 前言 & 准备Mona 2是一种非常有用的插件&#xff0c;它由Corelan Team开发。起初是为Immunity Debugger写的&#xff0c;现在它适用于WinDbg调试器。你将需要为WinDbg x86 和 WinDbg x64安装一些工具&#xff1a;安装Python 2.7 (从这…