php面向对象所有理论笔记

关于属性值,可以声明属性并赋值,也可以声明先不赋值

关于php中的类,请注意,属性必须是一个‘直接的值’
是8种类型任意的值。
不能是表达式1+2的值
不能是 函数的返回值time()
封装:

对于一个对象,对外界开放一个接口,
调用接口时,内部进行的操作,不需要让外界知道.
隐藏了内部的一些实现细节.

这是对方法的封装.
方法被包在类中,与外部的函数,可以重名,不冲突

__construct构造函数
__destruct()对象的销毁
1:显示的销毁 unset 赋值为null 都可以
2:php的脚本语言特点,在代码执行最后一行,自然对象的那段内存也要释放对象被销毁

权限修饰符:用来说明属性或者方法权限特点
Public公开的
Private私有的
Protected保护
总结:private权限控制,只能在类的{}内调用,走出了{}谁也不能调用

继承:
是指以一个类为父类,另一个类作为其子类,子类在继承了父类的属性方法的基础上,进一步的增加或者删除
继承基本语法:子类 extends父类{ }
注意子类只能继承一个父类

对于子类继承父类的protected和public属性方法
1.父类有的,子类继承
2.父类有的,子类可以更改
3.父类没有,子类可以增加

继承时,继承protected和public属性方法
安全继承过来属于子类

继承来父类private属性方法
但不能操作

继承时的权限变化
继承只能 权限只能越来越宽松或者不变,不能越来越严格
构造函数也是可以继承的,继承的原则不变
如果子类也声明构造函数,则父类的构造函数被覆盖。
如果子类继承时 子类有构造函数,保险一点调用 parent::__construct

Public 可以在类外调用,权限最为宽松,
Protected和private不能再类外调用

多态:
如果按php本身特点,不检测类型。
本身就是多态的,甚至是变态的
但是php5.3以后,引入对象类型的参数检测,
注意 只能检测对象的所属的类
其实 这对于php来说,限制了其灵活性,达到了java中多态的效果
反思多态:
指抽象的声明父类,具体的工作由子类对象来完成,
这样,不同的子类对象完成,有不同的特点

静态属性 static
静态属性既然存放于类空间内
1.类声明完毕,该属性就已经存在,不需要依赖于对象而访问
2.类在内存中只有一个,因此静态属性也只有一个;

静态属性只有一个为所有的对象的共享

普通方法需要对象去调动,需要绑定$this,即,普通方法,必须要有对象,用对象调用
而静态方法,不属于哪个对象,属于类,因此不需要去绑定$this即 静态方法,通过类名就可以调动
非静态方法是不能由类名静态调用的,只要该方法没有$this,就会转换静态方法调用
类->访问->静态方法 可以
类->访问->动态方法 可以 在没有this的情况下
对象->访问->可以
对象访问静态方法 可以
 

单例模式
主要思路:
1:保护或私有构造函数,防止外部实例化;
2:内部开放一个公共的静态方法,负责实例化
3:类有一个静态属性存放对象
当静态属性已经存放对象,直接return该对象

Final最终的
做个关键词在php中可以修改类,方法名,但不能修饰属性
Final修饰类则此类不能被继承,final修改方法则此类不允许重写

魔术方法:
是指某些地方会自动调用的方法,称为魔术方法
他们的特点都是以双下划线开头的
__clone 克隆方法 当对象被克隆时将会被自动调用
__get
当我们调用一个权限上不允许调用的属性时和不存在的属性,
__get魔术方法会自动调用,
并且自动传参参数值是属性名
 

 

__set的作用
当为无权操作的属性赋值时
或者不存在的属性赋值时
__set()自动调用
且自动传2个参数 属性和属性值
 

 

Isset()方法
当isset()判断对象不可见属性的时(protected/private/不存在)
会引发__isset()来执行
 

 

__unset()
当用unset销毁对象的不可见属性时候会引发__unset()
 

 

__call
当调用无权限或者不存在的方法,并且带有参数,想调用会被自动执行数组
 

 

__callStatic 是调用不可见的静态方法,自动调用

重载overload
存在多个同名方法,但是参数类型个数不同,传不同的参数,调用不同的方法
但是在php中,不允许存在多个同名方法
const声明
普通常量 define(‘常量名’,‘值’)
以前说过 define定义的常量,全局有效,
无论是页面内,函数类,类内,都可以访问

能否定义,专门在类类发挥作用的常量
专门在类内发挥作用 说明
1.作用于在内类 类似于静态属性
2.又是常量,则不可改
其实就是‘不可更改的静态属性’

类常量用声明const,不能用$,不能用public

魔术常量:

__FILE__
__DIR__
__LINE__
__CLASS__
__METHOD__

延迟绑定:
static::属性/方法

抽象类:
抽象类无法实例化

总结:
类前加abstract是抽象类
方法前加abstract是抽象方法
抽象类不能实例化
抽象方法不能有方法体
有抽象方法必是抽象类
抽象內,未必有抽象方法
但是–即便全是具体方法,但类是抽象的,也不能实例化

接口:
类如果是一种事物/动物的抽象
那么接口,则是事物/动物的功能的抽象
即再把它们的功能各拆成小块
自由组成新的特种
因为接口的方法本身就是抽象,不要有方法体,也不必加abstract
interface implements
接口的方法必须是公共的
接口的方法默认是抽象的
接口不能有属性(常量可以用)
类必须实现接口的所有方法才能实例化
类可以继承多接口
接口也可以继承多接口
类的自动加载:
如果调用某个不存在的类
在报错之前

我们还有一次介入机会__autoload函数
系统会调用__autoLoad()函数
并把'类名'自动传给__autoload函数
类是全局调用,什么地方都可以调用
自动加载不一定只能用__autoload
spl_autoload_register()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值