面对对象
1、类里面有三种成员:属性(普通属性,静态属性),方法(普通方法,静态方法,魔术方法(
__construct,__destruct,__set,__get,__isset,__unset,_call,__callStatic,__sleep,__wakeup,__clone
)),常量(访问权限为public),属性和方法可以加访问权限修饰符(public,protected,private)
2、魔术方法:
1、__construct()构造方法,创建对象时调用, __destruct()析构方法,对象被销毁(unset)或页面运行完毕时调用
2、属性重载器:__set,在类外部给一个不可访问属性如private,protected或者没有的属性赋值时,会调用, __get, __isset,在类外对一个不可访问属性使用isset方法时调用, __unset,在类外对一个不可访问属性使用unset方法时调用
3、方法重载器:__call,在类外部调用一个不可访问方法时调用,__callStatic,在类外部用静态方式访问一个不可访问方法时调用
类里面的静态方法里不能用$this
3、子类调用父类,$this或静态调用(Parent::$fun)
4、后期静态绑定,在父类中static::,父类想访问子类成员(属性、方法、常量)
5、类是单继承的,一个类可以实现(implements)多个接口;接口可以继承多个接口(接口拆分)
6、接口是一种规范,与第三方合作的说明书。如果一个类实现了一个接口,那么这个类的实例就属于接口类型,class s implements p;$s = new s;检测$s instanceof p === true;
7、抽象类里可以有具体方法,抽象类的常量在子类中可以修改,抽象类不能实例化
8、自动加载(类,接口,命名空间):spl_autoload_register,get_include_path,set_include_path,PATH_SEPARATOR(windows下是‘;’,linux下是‘:’)
9、序列化(serialize,__sleep控制哪些属性序列化)与反序列化(unserialize,__wakeup准备其他资源,连接数据库)
10、对象复制,clone浅复制(只复制表面一层,若里面属性的值含有如对象,修改复制的对象里面的值,则会影响原有对象),深复制(克隆的两个对象完全脱离关系),使用__clone,在方法里clone,在类外部调用clone时,会触发__clone();
11、trait,不能实例化,里面不能有常量,使用方法use traitName,调用优先级本类>trait>父类;trait里可以有抽象方法,使用时要实现
12、final类不能被继承,final方法不能部覆盖
13、$obj instanceof $class,检测对象是否属于某一个类或父类
14、对象的遍历,直接用foreach
15、对象的比较 $obj1==$obj2返回true,则是同一个类的实例
16、命名空间成员:接口,类,函数,常量,变量
17、__METHOD__,__CLASS__,__NAMESPACE__
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析