https://www.bilibili.com/video/av33662479视频学习笔记
简单面向对象技术
类和对象
1.定义类基本语法:class 类名{}
<?php
class MyClass{
//...定义一个空类
}//注意类定义像函数定义一样是一种结构,本身不会执行,因此此处没有;号结尾
//类定义好了就可以在别的地方实例化一个对象使用了
2.类Class是一种结构,一种定义(类似函数定义),本身不会执行,也不存在是否有返回值.
3.类的命名规定:字母,数字,下划线构成,且不能以数字开头.
扩展:较新的现代编程语言如较新版本的php支持使用Unicode字符,例如汉字.
4.类的命名规范:帕斯卡命名法:单词首字母大写.
class MyClass{}
class YourClass{}
5.类的实例化对象:new 类名;//创建1个类的实例化对象
通常需要把类实例化即new1个对象来使用.
6.对象创建后可以直接使用,但为了方便后续使用,我们通常用1个变量保存它.
类和对象总结:
类成员
类成员(3种):成员变量即属性;成员方法即成员函数;类常量
1. 成员变量/属性:
定义语法: public 变量名[=值];成员变量可以赋值,也可以不赋值.
2.成员变量的访问:
成员变量必须通过对象才能进行访问,需要先实例化对象.
访问语法: $对象名->属性名;
!注意:PHP中类属性(成员变量)用户可以在外部手动增加/删除类属性.
严禁使用这种特性!因为打破了面向对象模块化,结构化的设计原则.正规严谨的现代面向对象编程语言绝不支持这种不规范特性.
类的设计原则是禁止在外部改变它的内部构造,在外部只能使用它提供的输出功能(改变它的内部结构是类内部的事情,不可以插手).例如:空调/电视机遥控器,我们可以使用各种按键功能,但是禁止用户把遥控器抠掉1个按钮或自己安装1个按钮.
3. 成员方法:类中的函数.
4. 访问成员方法
访问语法: $对象名->方法名();
5. 类常量:
定义方式: const 常量=值;
*注意:define的本质是函数.而类的直属成员只允许三种:成员变量,成员函数,类常量.
6. 类相关性:类成员中,成员变量,成员方法,类常量可以无限定义,但只允许存在这三种直属成员
类成员总结
访问修饰限定符
1.访问修饰限定符分三种:
public公开(类内外都可以访问),protected保护(仅类自身,父类,子类可访问,即仅亲属类可访问),private私有(仅类内可访问)
2.public公开修饰符
public修饰的类成员为公开成员.它们可以被类内部,类外部访问.
3.protected保护修饰符
protected修饰的类成员是保护成员.该成员只能被类内部,父类,子类(可统称为亲属/亲戚类)访问.类外部无访问权限.
4. private私有修饰符
private修饰的类成员是私有成员.该成员只能被类内部访问.亲属类和类外部无访问权限.
class 人类
{
public $姓名;
public $性别;
protected $月薪 = 0;//保护成员.月薪默认0
private $年龄 = 18;//私有成员.年龄默认18
}
//实例化一个对象,基于人类
$我 = new 人类();
$我->姓名 = '申佳明';
$我->性别 ='男';
//var_dump($我);
echo $我->姓名.'<br>';//正确.公开成员外部可以访问.输出申佳明
echo $我->月薪.'<br>';//出错,保护成员外部不可访问
echo $我->年龄.'<br>';//出错,私有成员外部不可访问
5.类成员访问修饰符(权限)总结
类内部对象
1.尝试在类内部方法中访问变量
注意:类方法的本质还是函数.因此受制于作用域.
2. 类内部访问类成员,需要通过对象来进行访问
注意:不推荐使用这种访问,此处仅为演示.因为Saler类的实例化对象不一定是$s.可能是$a,$b...
3. 使用类方法内置对象this访问类成员
4. this代表的是类实例化对象本身.
this处于类内部的类方法内部,因此可以通过this对象访问所有该类的输血和方法,不受访问修饰符限制.
5. this, class和new的关系
class是定义类结构,属于非执行代码.因此会被加载到代码段(编译阶段)
this是系统在方法内置的对象通用名字:它就是类实例化对象本身
类内部对象总结
面向对象开发规范
1属性的初始化
构造方法
1.构造方法实现:为类添加__construct()方法
2.构造方法调用:类实例化对象后立即被自动调用(初始化).
3.构造方法的意义:初始化对象的资源
4.构造方法的初始化:从外部传入数据来初始化
通常是通过构造方法的参数来实现数据的外部传入
5.实例化对象(系统自动调用构造方法)时传入形参 - 如果构造方法指定形参
6.手动调用构造方法(不推荐)
PHP允许手动调用构造方法.不推荐.
构造方法总结
析构方法
定义:析构方法在对象被销毁时自动调用.
1.析构方法的实现:类中增加__destruct()方法
2.析构方法的调用:对象销毁前自动调用
3,析构方法是对象销毁前用来释放对象中资源的,不是删除对象的
4.析构方法是普通方法,也可以手动调用(不推荐)
不推荐手动调用析构方法!违反面向对象编程原则.
5.对象销毁情形
- 没有任何变量引用对象
- 手动删除对象变量(unset)
- 脚本执行结束:释放所有变量
析构方法总结
- 1.析构方法是一种对象销毁时自动调用的方法
- 2.析构方法用来回收对象占用的资源,之后对象被销毁
- 3.php脚本执行结束,系统会自动回收所有资源
对象传值
对象传值是按引用传递的.不管对象赋值给多少变量,内存中只有1个对象
范围解析操作符(类常量访问)
定义:范围解析操作符由::组成.
1.类常量的普通访问尝试:尝试用对象进行访问×
2.类常量的访问方式: 类名::类常量名
静态成员
静态成员由static关键字修饰的类成员,表示该成员属于类访问,而不是实例化对象访问.
PHP静态成员为:静态属性和静态方法.静态成员可以直接使用类访问,而不需要先实例化对象.
1.静态属性:static修饰的属性.访问方式: 类名::$静态属性
2.静态方法:static修饰的方法.访问方式: 类名::静态方法()
3. 在类的内部也可以访问静态成员.访问方式: 类名::静态方法()或$静态属性
4. 静态方法本质也是类中定义的方法,因此也可以使用对象访问.但强烈不推荐!
5.同理,方法也是在类内部,在编译时就存在.因此可以使用范围解析操作符通过类来进行访问,强烈不推荐!(会报错,因为类只允许访问静态成员和类常量)
6.静态方法本质是给类访问,所以不允许在静态方法内部使用$this对象
静态成员总结
self关键字(类专用)
self关键字是一种在类的内部(方法里面)使用,替代类名的写法.能够保障用户方便修改类名字.
1.self用来替代类名,与范围解析操作符::一起使用
2.self可以在类的内部方便实例化对象.
比如构造方法private之后,就没有办法在类的外部实例化对象.此时可以在类内部进行对象实例化.