PHP中面相对象对象的知识点整理

面向对象

万物皆对象,将构成问题的事务分解到各个对象上,建立对象的目的不是为了完成一个工作,而是为了描述某个事务在解决问题中的行为,更符合人的思维习惯,代码重用性高,可扩展性.

__________________________________________________________________

类的概念

是一种抽象的概念,是具有相同语义定义对象的集合(具有相同属性和方法的集体),使用具体的类是不可行的,只能实例化。拿汽车举例,汽车的设计图纸就是类,汽车是对象。设计中重点是类的创建

现实生活中类的概念

万物皆为对象如我们使用的具体电脑就是对象,那电脑就是一个类。你去幼儿园接孩子,你说接孩子,人家一定不给你(除非认识你和知道你的孩子是谁),你要说出你孩子的名子,你的孩子就是具体的对象,孩子就是一个类

类名书写规范

类名首字母大写一个类定义在一个文件中,并以.class.php做为文件名结尾

__________________________________________________________________

对象

对象句柄

用于区分不同对象。对象创建后,在内存中获取一块存储空间,储存空间的地址就是对象的标识或句柄

属性

在类中定义的变量,即为成员属性,用于描述对象静态特性的数据。如人的姓名,性别,首字母小写

方法

函数定义在类中即为成员方法,用于描述对象动态特性的操作行为,方法名不区分大小写,不可重名,首字母小写

对象的生命周期

创建后,生命周期开始,当程序结束后或程序员清除对象后即销毁,PHP会自动销毁对象

对象的生命周期

1 程序执行完成后,PHP运行回收机制,删除内存的对象

2 删除所有

对象的引用后,对象即为垃圾,回收机制自动删除垃圾

对象产生的步骤

1 在内容中开辟出对象的空间

2 执行构造方法

3 将对象的引用地址返回

对象的内存分布:

1 对象引用被放到了“栈内存”里(栈存放固定内容)

2 对象是放在“堆内存”里(堆存放可变内容)

3 而静态成员则放到了“数据区”,在第一次被加载的时候放入的,可以让堆内存里面的每个对象所共享

4 函数和方法放在代码区

面向对象的特性

抽象性

把一类对象的共有属性和方法抽象出来,形成类,这种思考方式为抽象

封装性:

把成员方法和成员属性封装到类中,隐藏属性和方法,隐藏方法实现的细节,通过public protected private final static  限定类成员的访问权限,数据被保护在内部,只有通过被授权的成员方法才可以操作。尽可能的对成员进行封装

继承extends:

可以使一个类继承并拥有另一个已经存在类的成员属性和方法,被继承的类称为父类或基类,继承类为子类。extends 关键字 实现继承关系

多态:

子类继承父类,通过对父类方法重写实现多态

__________________________________________________________________________________________

访问修饰符(作用域描述符)

publlic 公有

在类的内部与外部或子类都可以访问,是最开放的权限

private 私有的

定义类的属性和方法,在类的内部可以访问,在类的外部或子类都不可以访问

protected 受保护的

定义类的属性和方法,在类的内部或子类可以访问,类的外部不可以访问

模块设计

强内聚(功能尽量在类的内部完成),弱耦合(开放尽量少的方法给外部调用)。例:公司销售接项目,具体工作交给公司内部程序员,设计人员,服务器管理人员协同完成

__________________________________________________________________________________________

static静态属性与静态方法

需要一个数据对象只服务于类,即类内部可用,对外不可用时。建对象是极其耗费资源的,因此当一个方法具有比较强的公用性的时候,没有必要为了调用这个方法而重新再生成该类的实例。定义的方法或变量在程序第一次加载时即驻留内存,程序结束释放。

静态方法不能被非静态方法重写,构造方法不允许声明为static的

static变量:

通过static声明的成员变量为静态变量或叫类变量,是该类的公共变量,在第一次使用时即生成,对于该类的所有对象只有一份,是属于类的,不是属于对象的。static变量是属于类而不属于对象,可以在任何地方通地类来访问,是类的全局变量,类创建时即存入内存。对多个对象来说,静态数据成员只存储一处,可以节省内存。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值。

static方法:

用static声明的方法为静态方法或叫类方法,执行该方法时不会将对象引用传给函数,所以我们不能访问非静态成员,只能访问静态方法或静态变量。只能使用关于类的方式如self   static  parent等。使用时不用生成对象即可执行

$this     self::    parent::

$this

是当前对象的引用, 一般出现在方法里,用于获取类的成员属性,或执行类的成员方法

self ::

对本类的引用 ,用于获取当前类的表态成员属性或静态成员方法self::run()

parent ::

对父类的引用,调用父类的方法或属性。

_________________________________________________________________________________

构造方法&析构方法

构造方法__construct()

在创建对象时自动执行,没有返回值,用于执行类的一些初始化工作,如对象属性的初始化工作,PHP4中构造方法必须与类同名,php5中规定构造方法为__construct(),优点是不受类名的影响,如果不存在__construct  php搜索与类同名的方法自动执行。

可以在构造方法中传递参数,用于定义属性,在父类和子类都定义构造方法时,执行子类的构造方法

析构方法__destruct():

用于对象在内存中被销毁时自动执行的方法,不带任何参数

_________________________________________________________________________________

对象 final const

  1. //类里面的方法不能修改
  2. //类不能被继承
  3. final class souji {
  4. final public $pinpai; //报错
  5. final function congdian() { //无效
  6. echo $this->pinpai . "手机通过10v电压来充电";
  7. }
  8. public function kaijidonghua() {
  9. echo "<<< 没有开机动画 >>>>";
  10. }
  11. }
  12. class moto extends souji {
  13. public function __construct() {
  14. // $this->pinpai = "摩托罗拉";
  15. $this->congdian();
  16. }
  17. public function kaijidonghua() {
  18. echo "摩托罗拉商标";
  19. }
  20. }
  21. $li = new moto();
  22. $li->kaijidonghua();
  23. //定义常量
  24. define("WEBNAME", "文豆");
  25. function aa(){
  26. echo WEBNAME."专注PHPWEB开发";
  27. }
  28. aa();
  29. class caiwu{
  30. const suilv=0.05;
  31. function __construct(){
  32. echo WEBNAME;
  33. }
  34. function kaigonzi($xingming,$gongzi){
  35. $gongzi = $gongzi-$gongzi*self::suilv;
  36. return $xingming."的工资是:".$gongzi."元";
  37. }
  38. }
  39. /*员工类*/
  40. class yuangong{
  41. private $xingming;//姓名
  42. private $gongzisu;//工资数
  43. function __construct($xingming,$gongzisu){
  44. $this->xingming = $xingming;
  45. $this->gongzisu = $gongzisu;
  46. }
  47. function kaizi(){
  48. $caiwu = new caiwu();
  49. return $caiwu->kaigonzi($this->xingming, $this->gongzisu);
  50. }
  51. }
  52. $lisi = new yuangong("李四", "6000");
  53. echo $lisi->kaizi();
时间: 2024-11-02 13:21:11

PHP中面相对象对象的知识点整理的相关文章

asp.net mvc 3.0 知识点整理 ----- (2).Controller中几种Action返回类型对比

通过学习,我们可以发现,在Controller中提供了很多不同的Action返回类型.那么具体他们是有什么作用呢?它们的用法和区别是什么呢?通过资料书上的介绍和网上资料的查询,这里就来给大家列举和大致的概括下. (1). ActionResult(base):最基本的Action类型,返回其他类型都可以写ActionResult. (2). ContentResult:返回ContentResult用户定义的内容类型. public ActionResult Content() { return

【知识点整理】Oracle中NOLOGGING、APPEND、ARCHIVE和PARALLEL下,REDO、UNDO和执行速度的比较

[知识点整理]Oracle中NOLOGGING.APPEND.ARCHIVE和PARALLEL下,REDO.UNDO和执行速度的比较 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 系统和会话级别的REDO和UNDO量的查询 ② NOLOGGING.APPEND.ARCHIVE和PARALLEL下,REDO.UNDO和执行速度的比较(重点)   Tips: ① 本文

HTML5中的Range对象的研究

一:Range对象的概念 Range对象代表页面上的一段连续区域,通过Range对象,可以获取或修改页面上的任何区域,可以通过如下创建一个空的Range对象,如下: var  range = document.createRange(); 在html5中,每一个浏览器窗口及每一个窗口中都有一个selection对象,代表用户鼠标在页面中所选取的区域,(注意:经过测试IE9以下的浏览器不支持Selection对象), 可以通过如下语句创建selection对象: var  selection =

JS搞基指南----延迟对象入门提高资料整理

原文:JS搞基指南----延迟对象入门提高资料整理 JavaScript的Deferred是比较高大上的东西,  主要的应用还是主ajax的应用,  因为JS和nodeJS这几年的普及,  前端的代码越来越多,  各种回调套回调再套回调实在太让人崩溃, 所以就从后端拖了一个延迟对象这货, 用来解决回调地狱这个问题 .  我们使用ajax的时候多数都是为ajax添加回调 ,然后异步向服务器发送请求, 比如如下原生的XHR代码: <!DOCTYPE html PUBLIC "-//W3C//D

javascript中的Array对象的slice()、call()、apply()详解

来51cto已经很多年,就是没怎么写文字,今天来一篇介绍JS的,文章篇幅不是很大,大部分内容是我参考了别人的博客后经过自己理解,自己整理的.方便自己以后回顾知识.文中涉及到javascript中的Array对象的slice().call().apply(); slice()方法,在我之前做的项目中,有两种数据类型下用到过.第一种是string类型的,还有一种是Array对象: string对象的slice(): 定义和用法 slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部

iOS中的僵尸对象的实现

僵尸对象对于我们调试程序来说很有用,在XCode中打开僵尸对象的方法是设置NSZombieEnabled环境变量为YES,这导致所有的对象都不会被释放,程序跑起来会时间长了内存占用量很大,这次我们就要来写一些代码,模仿XCode中的实现,这样我们也能够大体上了解了XCode中实现僵尸对象的原理了. Mike Ash在他的博客中已经解释了僵尸对象实现的细节,我在这里就算是翻译一下吧...  (这些链接可能需要翻墙...) OC中的对象都是结构体,结构体中第一个字段是一个isa,指向对象的类对象,类

hibernate框架的核心对象和相关知识点

Hibernate架构下图提供了hibernate体系的高层视图: Hibernate全面解决方案: Hibernate核心APIConfiguration负责管理数据库的配置信息.数据库的配置信息包含了Hibernate连接数据库的一些基本信息(hibernate.cfg.xml),Configuration对象可以通过加载配置文件获取并管理这些信息. Configuration config = new Configuration().configure();或者:File file = n

C++中的函数对象(一)

STL中的函数对象,大多数STL类属算法(以及某些容器类)可以以一个函数对象作为参数.引入函数对象的目的是为了使算法的功能富于变化,从而增强算法的通用性. 所谓函数对象,是指一段代码实体,它可以不带参数,也可以带有若干参数,其功能是获得一个值,或者改变操作的状态.在C++编程中,任何普通的函数都满足这个定义,而且,任何一个重载了运算符operator()的类的对象也都满足这一定义,称为函数对象. 普通函数 int multfun(int x, int y) { return x*y; } 或者下

Spring MVC中如何传递对象参数

springController: [java] view plaincopy @Controller @RequestMapping("/user") public UserController extends BaseController{ @RequestMapping("/addUser") public void testBinderOuput(@ModelAttribute User user, HttpServletRequest request, H