面向对象(OOP)一
一、面向对象理论
1)面向对象概念
面向对象编程(object Oriented Programming,OOP),是一种计算机编程构架,OOP达到软件工程的三个目标重用、灵活和扩展性。
2)什么是对象?
对象是系统中用来描述客观事物的一个实体,包含了若干变量和函数的一个软件集合。客观世界是由对象和对象之间的联系组成。
(万事万物皆对象)
3)什么是类?
类是一组有相同属性和方法的一组对象集合。它属于该类的所有对象提供了统一的抽象描述。其内部包括属性和方法两个主要部分。
4)类和对象的关系
类和对象的关系就好比如模具和铸件的关系。类的实例化结果就是对象,而对一类的对象抽象就是类。类描述了一组有相同特征(属性)和相同行为(方法)的对象。
属性:类的静态描述,相当于变量。
方法:类的动态描述,相当于方法。
5)类的定义 : class 类名
命名规则:驼峰式命名,首字母大写,如果多个单词,每个单词首字母大写
demo:
class car{
public $color;//颜色,静态 属性,相当于一个变量
//开动,动态,方法,相当于一个函数
public function run(){
echo "开车";
}
}
$car1 = new car();//实例化得到一个对象,该对象拥有car类的属性和方法
$car1->color="red";属性调用,对象->属性 这部汽车为红色,给color属性附上红色
echo $car1->color //输出red;
$car1->run();//方法调用 对象->方法
在对象的外部访问成员的形式是 对象->成员 如果在对象内部则使用一个本对象的引用 "$this "每个对象都有一个对象的引用"$this "来代表这个对象,完成对象内部的调用
大多数类都有一种统称为构造函数的特殊方法,当创建一个对象时,它将自动调用构造函数,也就是使用new关键字来实例化对象的时候就自动调用构造方法。
构造函数的定义有两种
1、与类名同名
2、__construct(); php5后支持;推荐使用
在一个类中只能有且一个构造方法,只有每次创建对象的时候去调用一次构造方法,不能主动调用,所以它通常执行一些有用的初始化任务,比如对成员属性的赋值等。
与构造函数相对的就是析构函数,析构函数时PHP5新加的内容,析构函数允许在销毁一个对象之前执行一些操作和完成一些功能。比如说关闭文件、释放结果集等,其意义远不及构造函数。
析构函数在对象所有引用都被删除或对象被显性销毁是执行
析构函数的定义: __destruct();
析构函数无法传参
二、继承和重载
继承是面向对象的重要特性之一。继承是子类自动共享父类的数据结构和方法的机制。这是类之间的一种关系。子类可以再父类的基础上定义自己的属性和方法。
通过继承机制,可以利用现有的数据类型来定义新的数据类型,所定义的新的数据类型不仅有新定义的成员,还拥有旧的成员。我们称已存在的用来派生的新类叫基类,又称为父类或超类,派生出来的新类称为派生类或子类。
继承关键字: extents
单继承与多继承: PHP只支持单继承
所谓的方法重载就是定义相同的方法名,严格来说php中的方法是不能重载的,这里说的重载方法是指子类覆盖父类已有的方法,一般又称为重写。
在子类中,重写/覆盖从父类中继承过来的属性和方法
多态
在类中只要参数的个数或类型不同,方法可以重名,又称为多态。
php不支持,只有强类型语言才可以实现。
强类型语言:java c#等
php无法实现多态、因为php是弱类型语言,与多态的概念冲突
类型的访问修饰符都成员的访问进行限制,分别有:
public 公共的 同一个类中 类的子类 所有的外部成员
protected 受保护的 同一个类中 类的子类
private 私有的 同一个类中
重载的属性/方法 不能小于父类
public>protected>private
三、封装
封装性把对象的成员属性和成员方法结合成了一个独立的相同的单位,并尽可能隐藏其内部细节,只保留可以对外有访问权限的方法和外部产生联系。
四、final关键字
final只能用来定义类和方法,不能定义属性
使用final 关键字的类不能被继承,使用final 关键字的方法不能被子类覆盖,是最终版本。
定义:final class 类名 、final public function 方法名();
面向对象(OOP)一的更多相关文章
- PHP面向对象(OOP)编程入门教程
面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就 ...
- 【PHP面向对象(OOP)编程入门教程】1.什么是面向对象?
面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成 ...
- php面向对象(OOP)编程完全教程
摘自:http://www.php-note.com/article/detail/41 面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行P ...
- 拖拽系列二、利用JS面向对象OOP思想实现拖拽封装
接着上一篇拖拽系列一.JavaScript实现简单的拖拽效果这一篇博客将接着对上一节实现代码利用JS面向对象(OOP)思维对上一节代码进行封装; 使其模块化.避免全局函数污染.方便后期维护和调用:写到 ...
- 面向对象(OOP)基本概念
面向对象(OOP)基本概念 面向对象编程 —— Object Oriented Programming 简写 OOP 目标 了解 面向对象 基本概念 01. 面向对象基本概念 我们之前学习的编程方式就 ...
- python-面向对象-01_面向对象(OOP)基本概念
面向对象(OOP)基本概念 面向对象编程 —— Object Oriented Programming 简写 OOP 目标 了解 面向对象 基本概念 01. 面向对象基本概念 我们之前学习的编程方式就 ...
- [Python_4] Python 面向对象(OOP)
0. 说明 Python 面向对象(OOP) 笔记.迭代磁盘文件.析构函数.内置方法.多重继承.异常处理 参考 Python面向对象 1. 面向对象 # -*-coding:utf-8-*- &quo ...
- PHP面向对象(OOP)编程入门教程链接
PHP官方学习OOP: http://php.net/manual/zh/oop5.intro.php 从其他博主学习:(以下链接来源: http://blog.snsgou.com/post-41. ...
- Python3中面向对象 OOP
Python3中面向对象 OOP 定义: python中通过关键字 class 实现类的定义: class ClassName(object): pass 获取成员变量:ClassName.变量名 修 ...
- 如何吃透Python的面向对象(OOP)
本篇可乐和大家一起来吃透 Python 的面向对象,类和实例. 面向对象(OOP) 解释:面向对象它是一种编程的思想,将现实事物抽象化为编程对象. 举例说明:喝可乐 ① 选择自己根据配方买对应的材料 ...
随机推荐
- 关于android 数据库查询出现 _id column do not exist 的处理
查询的字段必须带上_id字段,否则就会出现此类异常,导致程序崩溃
- ubuntu14.04装完系统更新后桌面挂了
一开始是只显示个鼠标什么都没有,ctrl-alt-1切到控制台下,把lightdm重启下再进去,多了两个桌面图标,但是顶栏和侧栏都没有,也就是根本没法运行其它程序. 但是幸好桌面右键菜单里有一个“在控 ...
- Leetcode:9. Palindrome Number
这题要求不能使用额外的空间,我也就没做,看了下别人的代码,挺有意义的一道题目,出坏了. 解题思路:从右往左颠倒过来,看看这个值和原来的x值是不是一样,最后还要注意像20这种情况,也是的 public ...
- 6.7 通过命令启动IDEA,给IDEA创建快捷方式
我的IDEA安装在这里: 打开终端: 这里的./表示当前路径.如果是/表示根目录. 通过这个命令行,就可以开启IDEA了. 接下来,给IDEA创建快捷方式. 工具栏Tools->create d ...
- CSS学习系列3--CSS3中的box-shadow的使用
在CSS中,text-shadow是给文本添加阴影效果. box-shadow则是给元素块添加周边阴影效果. box-shadow基本的语法形式如下 box-shadow: [inset] x-off ...
- 浅谈JavaScript--闭包
闭包的概念 由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数". 变量的作用域 要理解闭包,首先必须理解J ...
- 【数据库】SQL注入攻击
背景: 机房收费系统验收的时候,师父提到SQL注入攻击.自己以前看过类似的博客大概知道一些这方面的事情,于是自己动手查了查. 定义: 所谓SQL注入,通过SQL命令插入到Web表单提交或者输入域名或页 ...
- linux线程私有数据---TSD池
进程内的所有线程共享进程的数据空间,所以全局变量为所有线程共有.在某些场景下,线程需要保存自己的私有数据,这时可以创建线程私有数据(Thread-specific Data)TSD来解决.在线程内部, ...
- 洛谷P2380 狗哥采矿
P2380 狗哥采矿 题目背景 又是一节平静的语文课 狗哥闲来无事,出来了这么一道题 题目描述 一个n*m的矩阵中,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是 ...
- h5自定义播放器得实现原理
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...