类与对象: 类是描述一类事物的一个总称,是具有相同特征特性的该类事物的一个通用名字(称呼); 比如人就是一个类(人类),狗也是一个类(狗类),它们又属于一个更大的类(哺乳类),桌子,手机,书都是一个类; 对象是一个明确的具体的“物体”,是某个类中的一个“实物”(相对来说,类就是一种抽象的泛称)。对象离不开类,或者说,对象一定隶属于某个类——有类才有对象,先有类再有对象。 比如“黄晓明”就是“人”这个类的一个具体对象,“阿黄”是“狗”这个类的一个具体对象。 一个类决定了一个对象所具有的所有特征特性信息,比如我是人类,则我有:姓名,性别,年龄,我还能吃饭,走路,说话。 一个对象的所有特征特性信息,都是由其所属的类决定的,但每个对象又很有可能有自己不同的特征特性信息,比如有个对象的名字叫吴六奇,性别男,会写程序,另一个对象可能叫章子怡,性别女,会演戏。 语法上,一个类内部可以具有自己的“变量”和“函数”,但此时在技术术语上就对应地称为“属性”和“方法”。一个类也可以有自己的常量。这些属性,方法和常量就都称为“类”的“成员”。 类的定义: 类中属性property: 类中方法method: 对象的创建:就是由一个类“创建”出一个具体的“物体”——专业说法就是对象。创建对象的语法可以有: new 类名(); new 变量名(); //该变量的内容是一个表示类名的字符串。 new 对象名();//创建该对象所属类的一个新对象 new self; //用于在类的方法内部创建一个该类对象。 类名::getNew();//定义类的一个静态方法用于获取该类的一个对象 对象的使用:要么使用其属性,要么使用其方法。使用属性,就可以当作一个变量看待。使用方法,就可以当作一个函数看待。 对象的传值: 类中成员member: 一个类中能且只能包含如下3种成员(代码):变量(称为属性),函数(称为方法),常量(称为类常量)。 一般属性: 属性就是定义在类中的变量,需要使用public或var来修饰(定义),也可以使用protected或private来修饰(见后续知识)。 定义的时候可以不赋值,也可以赋(初)值,但只能是一个“直接值”(常量值)或常量,不能是变量值或计算值或函数调用返回值等。 属性的使用形式:对象名->属性名; 属性是可读可写的(可取值赋值)。 一般方法: 方法就是定义在类中的函数,但函数前可以使用public,protected, private修饰(见后续知识),也可以省略。 但该方法的调用(使用)不能独立进行,而是需要通过对象来调用。 方法中$this关键字具有特定含义:表示调用该方法的对象。 获取$this的所属类:get_class($this) 静态属性: 一个仅仅隶属于(依附于)类的属性,其是通过类名直接来取用的。 定义形式:[访问修饰符] static $静态属性名 [ = 初值];//访问修饰符省略则默认为public,初值也应该是直接值或常量 使用形式:类名::$静态属性名;//可取值可赋值; 静态方法: 一个仅仅隶属于(依附于)类的方法,其是通过类名直接调用的(不过新版php已经可以使用该类的对象名来调用了) 定义形式:[访问修饰符] static function $静态方法名(...){ ...... } 使用形式:类名::静态方法名(...);其中类名也可以用该类的对象名,一个内容为该类名的字符串变量名,self等来代替。 self关键字:用在方法中,表示该方法所在的类。 static关键字:代替self关键字的位置,除了具有self作用外,还具有更灵活的作用,那就是所谓“后期静态绑定”。 注意1:$this在静态方法中不能使用。 注意2:静态方法中不应调用非静态方法。 类常量: 一个仅仅隶属于(依附于)类的常量,其是通过类名直接来取用的(不过新版php已经可以使用该类的对象名来调用了) 定义形式:const 常量名 = 初值;//必须赋初值 使用形式:类名::常量名;其中类名也可以用该类的对象名,一个内容为该类名的字符串变量名,self等来代替。 构造方法(函数): 构造方法是一个类在进行实例化(new一个对象出来)的时候,会首先自动调用的方法。 构造方法适用于创建对象时(使用对象前)对该对象做一些初始化工作。 定义形式:[访问修饰符] function __construct(...){ ...... };//访问修饰符通常总是需要public(或省略)。 调用形式:实际上,没有直接的调用形式,而是在new一个对象的时候就调用了:new C1("小花",18,"女"); 如果一个类中定义了构造方法,则实例化该类时就会调用该方法,且实例化时的参数需要跟构造方法的参数匹配。 如果一个类中没有定义构造方法,则会自动调用其父类的构造方法(如果有),则实例化时的参数需跟父类的构造方法的参数匹配。 也可以在当前类的构造方法中调用父类的构造方法:parent::__construct(); 析构方法(函数): 析构方法是在一个对象被销毁的时候会自动调用(执行)的方法;对象销毁的几种情况: 脚本程序运行结束,自动销毁; 明确地unset()一个对象变量,则被销毁; 改变对象变量的值,被销毁; 析构方法适用于销毁对象时对对象中使用的一些资源进行清理(销毁)——不过实际上现代PHP已经内具了垃圾回收机制,一般无需清理。。 定义形式:function __destruct(){ ...... };//注意:只能是public的,且不能有参数 调用形式:无需在代码中手工调用,而是在代码运行结束时自动被调用(执行)。 如果一个类中定义了析构方法,则销毁对象时就会调用该方法。 如果一个类中没有定义析构方法,则销毁对象时就会调用其父类的析构方法(如果有) 类的继承: 基本含义:类是用来描述现实世界中同一种事物的共有特性的抽象模型。但现实世界中,不同种类的事物之间有往往有一些上下级或大小范围的关系。比如,动物是一个“类”,具有某些特性。但脊椎动物也是一个类,也具有一些特性,且同时具有动物类的所有特性。哺乳动物还是一个类,具有一些特性,并同时具有脊椎动物的所有特性。如此等等,则面向对象编程中,我们定义的类也同样可以具有类似的关系特征,这就是类的继承。 基本语法:extends 基本概念: 继承:一个类从另一个已有的类获得其特性,称为继承。 派生:从一个已有的类产生一个新的类,称为派生。 父类/子类:已有类为父类,新建类为子类。 单继承:一个类只能从一个上级类继承其特性信息。PHP和大多数面向对象的语言都是单继承模式。C++是多继承。 扩展:在子类中再来定义自己的一些新的特有的特性信息(属性,方法和常量)。没有扩展,继承也就没有意义了。 访问控制修饰符: public公共的:在所有位置都可访问(使用)。 protected受保护的:只能再该类内部和该类的子类或父类中访问(使用)。 private私有的:只能在该类内部访问(使用)。 parent关键字:在类的内部用来表示(代表)该类的父类。可以用来访问父类的属性或方法或常量。 构造和析构方法中的调用上级同样方法的问题: 子类中没有定义构造方法时,会自动调用父类的构造方法。因此实例化子类时,需按照父类的构造方法的形式进行。 子类定义了自己的构造方法,则不会自动调用父类的构造方法,但可以手动调用:parent::__construct(); 子类中没有定义析构方法时,会自动调用父类的析构方法。 子类定义了自己的析构方法,则不会自动调用父类的析构方法,但可以手动调用:parent::__destruct() 重写override 什么是重写?重写又叫“覆盖”,就是将从父类继承下来的属性或方法重新定义。只有保护的或公有的属性或方法能够被覆盖。 为什么要重写?因为父类的某个属性可能对于子类来说不够具体或详细,子类想要同样特性或功能的更准确或详细信息。 重写的基本要求:访问控制权限,方法的参数形式。 私有属性和私有方法的重写问题:私有属性和方法都不能覆盖,但其实子类可以定义跟父类私有的同名属性或方法。只是当作一个自身的新的属性或方法来看待而已。不过方法的参数必须一致。 构造方法的重写问题:构造方法不但可以像其他普通方法一样重写,而且,比普通方法更宽松:重写的时候参数可以不一致。 最终类final class: 最终方法final method: 设计模式: 工厂模式:一种专门用于“生产”其他各种类的对象的一个类 单例模式:一种只能从中实例化出来一个对象的类 类的“扩大化”技术: 抽象类,抽象方法: 一个类可以使用关键字abstract声明为抽象类;抽象类是不能实例化的类,只用作其他类的父类。 一个方法可以使用关键字abstract声明为抽象方法;抽象方法只需要声明方法头,不需要大括号部分的方法体。 一个类中有抽象方法,则该类必须声明为抽象类。 子类继承自一个抽象类,则子类必须实现父类中的所有抽象方法,除非子类也继续作为抽象类。 子类实现抽象父类的方法时,访问控制修饰符的范围不能降低,且方法的参数也须一致。 重载技术overloading: 属性重载:__set(), __get(), __isset(), __unset() 方法重载:__call(), __callstatic(); 接口interface: 什么是接口? 为什么需要接口? 接口的定义形式: 接口的实现:使用接口被称为接口的“实现”(implements),其实就是类似“继承” 接口的多实现: 接口常量: 接口继承: 有关类或对象的其他相关技术: 类的自动加载:__autoload(), spl_autoload_register(); 对象的复制(克隆): 对象的遍历: PHP内置标准类: 对象的类型转换: 将得到一个标准类stdClass的对象 对象转换为对象:没有变化; 数组转换为对象:数组的键名当作属性名,值为对应值; null转换为对象:空对象; 其他标量数据转换为对象:属性名为固定的“scalar”,值为该变量的值 类型约束:可以对函数(方法)的参数设定必须使用的类型。只能对对象,接口,数组进行约束。 与类有关的魔术常量:CLASS, METHOD 与类有关的其他魔术方法: 已学过的魔术方法:__construct, __destruct, __set(), __get(), __isset(), __unset(), __call(), __callstatic() __sleep()和__wakeup(): 序列化操作的时候,会先调用__sleep()方法,反序列化操作的时候会先调用__wakeup()方法。 __tostring():将对象当作字符串来使用的时候,会自动调用该方法,以此来作为对象转换为字符串的结果数据。 __invoke():将对象当作函数来使用的时候,会自动调用该方法。 与类有关的系统函数:class_exists(), interface_exists(), get_class(),get_parent_class(), get_class_methods(), get_class_vars(), get_declared_classes() 与对象有关的系统函数:is_object(),get_object_vars() 与类有关的运算符:new,instanceof

转载于:https://my.oschina.net/fenuangcd/blog/697967

九、PHP知识核心 面向对象相关推荐

  1. 项目管理的九大知识领域

    管理的九大知识领域是指作为项目经理必须具备与掌握的九大块重要知识与能力.其中核心的四大知识领域是范围.时间.成本与质量管理.在这些知识领域中还涉及很多的管理工具和技术,以用来帮助项目经理与项目组成员完 ...

  2. 【产品】项目管理的五个过程和九大知识领域

    项目是为完成某一独特的产品或服务所做的一次性努力. 根据这个定义,项目就具有了目标明确性.活动一次性及资源消耗性等特性.具备前面三个主要特性的活动,都可以看作是项目. 现实中的项目随处可见, 如设备消 ...

  3. 专题 | 项目管理知识、方法论、工具NO.9:你应该知道的项目管理的五个过程组和九大知识领域

    我们都想做一个优秀的项目经理,但是很多项目经理常陷入问题的泥淖中出不来.计划有问题.人员能力不足.进度赶不上.质量不达标.客户不满意,项目开始不到一个月,项目经理被各种问题缠的透不过气来,自己乱了阵脚 ...

  4. 知识图谱入门 【九】- 知识问答

    知识图谱入门 [一]- 认识图谱技术 知识图谱入门 [二]- 知识表示与知识建模 知识图谱入门 [三]- 知识抽取 知识图谱入门 [四]- 知识挖掘 知识图谱入门 [五]- 知识存储 知识图谱入门 [ ...

  5. 信息系统项目管理师-九大知识领域必备知识点整理

    场景 在备考阶段,九大知识领域有关的知识重点需要背诵的内容整理. 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相 ...

  6. 项目管理九大知识体系:

    项目管理九大知识体系: 项目管理九大知识体系: 项目管理九大知识体系:         范围管理:项目为何总是做不完?范围管理要界定           做过项目的人可能都会有这样的经历:一个项目做了 ...

  7. 项目管理九大知识领域五大过程组

    项目管理九大知识领域五大过程组 PMP人士与非PMP人士之间的区别是什么,一个最简单的区别就在于:PMP谈到项目管理,往往脱口而出的就是PMBOK.九大知识领域.五大过程组.WBS.关键路径法.挣值管 ...

  8. PMBOK(第4版)--项目管理九大知识领域的【输入】、【工具与技术】、【输出】一览表

    项目管理的九大知识领域 领域 概述 输入 工具与技术 输出 项目整合管理 4.1 制定项目章程 1 项目工作说明书 1 专家判断 1 项目章程 2 商业论证 3 合同 4 事业环境因素 5 组织过程资 ...

  9. PMBOK项目管理九大知识领域和五大流程 --美国IT项目管理硕士笔记(二)

    PMBOK 项目管理 九大知识领域和五大流程 PMI Project Management Institute.PMI 是世界上最大的非盈利机构,是项目管理领域的领导者.PMI制定项目管理行业标准,带 ...

最新文章

  1. 点云python-pcl
  2. JavaScript中双叹号(!!)和单叹号(!)
  3. linux下vi命令大全[转]
  4. python四十九:封装
  5. 肯德基圣代中间空心_建造冰淇淋圣代解释CSS位置
  6. 最全的BI工具选型指南!给你五大箴言要记住
  7. 【LeetCode每天一题】Permutations(排列组合)
  8. 全网独家分享,软件测试就该这么学,3个月进大厂!
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的药方中医管理系统
  10. node.js读取JSON文件
  11. 关于Win10系统的封装
  12. 团队作业——项目验收与总结博客
  13. H3C IRF2的三种配置情况「转载」
  14. 隐藏桌面上计算机图标不见了怎么办,电脑的快捷图标不见了怎么办
  15. BeAlert 一款alert和confirm美化插件(优化)
  16. wps合并重复项并求和_Excel中重复项求和的方法
  17. JAVA-读取excel转成html 将excel表格转换为HTML文件格式 转成前端表格样式
  18. 什么是VTP?(简单介绍)
  19. 国内免费接收回复Google Voice短信的方法
  20. 奥的斯服务器设置楼层运行,奥的斯服务器PPT

热门文章

  1. 集成电路总线(Inter-Integrated Circuit, I2C)
  2. 此更新不适用于您的计算机 kb4012212,2017 年 3 月发布的适用于 Windows 7 SP1 和 Windows Server 2008 R2 SP1 的纯安全质量更新...
  3. java计算机毕业设计ssm理想电子商城网站c48j7(附源码、数据库)
  4. 微信小程序组件的引入和调用的方法
  5. Nvidia回应Linux之父的指责 坚持不做任何让步
  6. cad自动填写页码lisp_求CAD高手指点,怎么能做到让图纸自动编页码
  7. 手机号码归属地查询接口(精确到地市)
  8. 小学生学Arduino------制作流水灯
  9. aj-report 报表设计器如何添加组件
  10. catboost案例