首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    php面向对象第二篇

    上次我们讲到构造析构函数是吧。 我们接着来: 构造函数什么时候产生:创建对象的过程中产生的哈 当new people();的过程中的调用构造函数然后才能算得上一个对象哈 何为构造,就是构想创造嘛是吧,创造一个对象出来是吧 同学们:我问你们一个问题: 就是一个对象如果没有初始化(构造函数),那还是对象吗? 不是的,老师。 为什么? 因为new people();就是我创建一个类的实例出来,名字在左边哈。 new:就是创建的意思。 people();是类的实例出来(人类的实例是陈业贵)。 请问一下,只有一个行不? 不行,为什么? 因为如果只有new 怎么办? 那就是请问你要创建什么? 只有people();怎么办? 那就是请问你构思想创造出来一个类的实例,请问你只会想吗? 没有new怎么创造呢?

    02

    面向对象复习笔记(一)

    1.面向对象概念:世界万物皆对象。 2.对象的组成:两部分 a.成员属性 :对象的数据模型,用于描述对象的数据,又称为对象的属性,或者对象的成员变量。 b.成员方法:对象的行为模型,用于描述对象能够做什么事情,又被称为对象的方法。 3.对象的特点: a.每个对象都是独一无二。 b.对象是一个特定的事物,他的职能是完成特定的功能。 c.对象是可以重复使用的。 4.什么是面向对象?面向就是编程的时候一直把对象放在心上。 面向对象编程就是 在编程的时候数据结构(数据组织方式)都是通过对象的结构进行存储 5.为甚魔使用面向对象? 对象的描述方式更贴合真实的世界,有利于大型业务的理解 在程序设计的过程中用对象的视角分析世界的时候,能够拉近程序设计与真实世界的距离 6.面向对象的实质:就是把生活中要解决的问题都用对象的方式进行存储(属性 方法) 对象与对象之间通过方法的调用完成互动(方法) 7.面向对象的基本思路: a.识别对象 任何实体都可以被识别为一个对象 b.识别对象的属性 对象里面存储的数据被识别为属性 对于不同的业务逻辑,关注的数据不同,对象里面存储的属性也不同 c.识别对象的行为 对象自己属性数据的改变 对象和外部交互 8.面向对象的原则:高内聚低耦合 a.对象内部是高内聚的:该有的都有,不至于缺胳膊少腿 所有对象相关的内容都封装到对象内部 对象只负责一项特定的职能(投篮) b.对象对外是低耦合的:相互之间依赖关系特别小,程序设计的更灵活,有利于对象的重用 外部世界可以看到对象的一些属性 二、基本实践 1.类的概念: 物以类聚,把具有相似特性的对象归类到一个类中 类定义了这些相似对象拥有的相同的属性和方法 类的对象称为类的一个实例(Instance) 类是相似对象的描述,称为类的定义,是该类对象的蓝图或者原型 类的属性和方法统称为类成员(重要) 类就是一个框架,对象就是把这框架塞满 2.类的实例化(instantiate):通过类定义去创建一个类的对象,类只有一个,可以实例化出多个对象 类的定义里面属性值都是空的,而对象的属性都有具体的值 三.高级实践 1.继承的好处: a.父类里面定义的类成员可以不在子类里面重复定义,节约编程的时间和成本。 b.同一个父类的子类具有相同的父类定义的类成员,因此外部调用它们的时候可以一视同仁 c.子类可以修改和调整父类定义的类成员:我们成为重写overwrite,一旦子类修改了就按照子类修改后的功能执行 d.单继承原则:一个子类只能继承一个父类 2.面向对象的三种访问权限 public:公有的类成员,可以在任何地方被访问(定义该成员的类即自身,该类的子类,其他类) protected:受保护的类成员,可以被其自身及其子类访问 private:私有的类成员,只能被自身访问

    01

    面向对象笔记「建议收藏」

    一.概念 1.面向对象概念:世界万物皆对象。 2.对象的组成:两部分    a.成员属性 :对象的数据模型,用于描述对象的数据,又称为对象的属性,或者对象的成员变量。    b.成员方法:对象的行为模型,用于描述对象能够做什么事情,又被称为对象的方法。 3.对象的特点:         a.每个对象都是独一无二。         b.对象是一个特定的事物,他的职能是完成特定的功能。         c.对象是可以重复使用的。 4.什么是面向对象?面向就是编程的时候一直把对象放在心上。   面向对象编程就是 在编程的时候数据结构(数据组织方式)都是通过对象的结构进行存储 5.为甚魔使用面向对象?    对象的描述方式更贴合真实的世界,有利于大型业务的理解    在程序设计的过程中用对象的视角分析世界的时候,能够拉近程序设计与真实世界的距离 6.面向对象的实质:就是把生活中要解决的问题都用对象的方式进行存储(属性 方法)   对象与对象之间通过方法的调用完成互动(方法) 7.面向对象的基本思路:    a.识别对象     任何实体都可以被识别为一个对象    b.识别对象的属性     对象里面存储的数据被识别为属性     对于不同的业务逻辑,关注的数据不同,对象里面存储的属性也不同    c.识别对象的行为      对象自己属性数据的改变      对象和外部交互 7.面向对象的原则:高内聚低耦合    a.对象内部是高内聚的:该有的都有,不至于缺胳膊少腿      所有对象相关的内容都封装到对象内部      对象只负责一项特定的职能(投篮)    b.对象对外是低耦合的:相互之间依赖关系特别小,程序设计的更灵活,有利于对象的重用      外部世界可以看到对象的一些属性 二、基本实践 1.类的概念:        物以类聚,把具有相似特性的对象归类到一个类中        类定义了这些相似对象拥有的相同的属性和方法        类的对象称为类的一个实例(Instance)        类是相似对象的描述,称为类的定义,是该类对象的蓝图或者原型        类的属性和方法统称为类成员(重要)        类就是一个框架,对象就是把这框架塞满 2.类的实例化(instantiate):通过类定义去创建一个类的对象,类只有一个,可以实例化出多个对象   类的定义里面属性值都是空的,而对象的属性都有具体的值 三。高级实践   1.继承的好处:     a.父类里面定义的类成员可以不在子类里面重复定义,节约编程的时间和成本。     b.同一个父类的子类具有相同的父类定义的类成员,因此外部调用它们的时候可以一视同仁     c.子类可以修改和调整父类定义的类成员:我们成为重写overwrite,一旦子类修改了就按照子类修改后的功能执行     d.单继承原则:一个子类只能继承一个父类   2.面向对象的三种访问权限     public:公有的类成员,可以在任何地方被访问(定义该成员的类即自身,该类的子类,其他类)     protected:受保护的类成员,可以被其自身及其子类访问     private:私有的类成员,只能被自身访问   3.静态属性和静态方法的定义     静态属性定义时在访问控制关键词后面添加static关键词即可,静态方法同理。如 public static $president=’tom’;       public static function test(){}.     访问静态属性:类名::$president  #带 $ 符号 。在类定义中使用静态成员时,用self(或static)::$president     访问静态方法:类名::test();     在类定义外部访问静态属性时,我们使用类名::类的静态成员(成员属性,成员方法)。     使用parent访问父类中的静态成员。     在类的静态方法中不能使用$this调用类的非静态成员。     注意:6个       a.静态属性用于保存类的公有数据       b.静态方法里面只能访问静态属性       c.静态成员不需要实例化对象就可以访问       d.类的内部可以通过static或者self关键词访问自身静态成员       e.可以通过parent关键词访问父类的静态成员       f.可以通过类名称在类定义外部访问静态成员   4.final关键词     在子类中编写跟父类中方法名称完全一致的方法,可以完成对父类中方法的重写(overwrite)     a.对于不想被任何类继承的类可以在class之前添加关键字final     b.对于不想被子类重写(修改)的方法,可以在方法定义的前面加final   5.数据访问     a. 用parent关键字可以访问父类中被子类重写了的方法

    03

    记一次协程环境下类成员变量污染的问题

    我维护的项目采用的技术框架是php中基于swoole的一个web框架叫做swoft。该框架是协程环境,并且是模仿springboot的一个注解式的php框架。我做的一个需求,发生了协程环境下的类成员变量污染的问题。事故是这样的:发起一次rpc请求,返回的结果存在一个类的成员变量,但是发现请求的参数跟结果对不上,我先是排查了错误日志,没发现异常,然后排查请求执行日志,发现日志数量丢失了。于是我仔细看了代码,我通过职责链模式将结果传递到了每一个类的成员变量中,而BeanFactory::getBean这个方法默认是获取单例的类,于是类的成员变量在没有保护的情况下被其他协程污染了。知道这个问题后,我通过修改注解,将职责链的每一个类都修改成多例模式。在本地使用Jmeter压测时结果是正确的,但是又发现了一个新的问题就是执行日志丢失的问题。后面仔细查看了swoft中log包的实现,发现框架开发组也犯了一个跟我一样的错误。他这里的思路是:将日志存放在类的成员变量messages中,这是一个数组,当这个数组中元素大于刷盘数量时,将该数组中的日志记录刷入文件中。但是却没有线程同步的代码块保护,于是在并发的情况下就可以复现日志被覆盖导致缺失的问题了。我在想框架的开发组不应该会犯这样的错误。于是翻了一下github的swoft框架的issue,发现在20年的时候就已经有人提出过这个问题,但是一直没有得到修复。后面我翻看了一下源码,发现他的log这个bean是单例模式,所以才有messages成员变量被污染的问题,我通过创建一个新的newLogger类并将其设置在框架启动时的日志处理类,该并发污染的问题就被解决了。

    08
    领券