面向对象php学习笔记16:面向对象基础-类和对象,属性/方法/类常量,public/protected/private,this,构造方法,析构方法,范围解析操作符,静态成员,self

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之后,就没有办法在类的外部实例化对象.此时可以在类内部进行对象实例化.

self关键字总结

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值