开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第一阶段:类成员】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/711/detail/12659
类成员
内容介绍:
一、类成员
一、类成员
1、目标
了解类成员的类型,类成员的作用,能够运用类成员去创建有效类。
空类没有价值,因为没有办法操作。
2、概念
类成员:指直接定义在类结构{}内部的一级成员,即直接依赖{的成员
(1)类成员分类
①成员变量(属性):给对象存储数据的变量
②成员函数(方法):给对象调用解决问题的函数
③类常量:属于类内部的常量,使用 const 关键字定义
属性和方法需要使用访问修饰限定符修饰,姑且使用 public 修饰
class 类名{
# 类常量(可以多个)
const 常量名 = 值;
# 属性(可以多个)
public $属性名[ = 值];# 可以赋值也可以不赋值,只声明
#方法(可以多个)
[public] function 方法名([形参列表]){
# 方法体(返回值)
}
}
(2)类里面的成员类常量、属性、方法
比如在函数里面定义一个变量 $a=10 很明显不属于类成员,归属的是大括号,所以只能属于函数里面的变量,把它称之为局部变量,所以归属搞清楚之后就会去产生对象,产生对象之后对象要去访问
①成员访问:属性和方法都属于对象访问,类常量属于类访问(后续再讲)
访问类似于进行数组操作的键值对的关系。
对象访问属性和方法,使用->
# 实例化
$object = new 类名();
# 属性访问
$object->属性名; #此时不带属性本身的$符号(前面保存对象的变量带$符号,object->属性名是整体)
# 方法访问
$object->方法名([实参列表]);
对象变量名实例化出来,属性直接$变量指向属性的名字,注意不要带$,对象调用对应的方法名,再把对应的实参传入进去。
一个是怎样去定义一个类里面有哪些成员,一个是类里面有成员之后怎么去访问。
3、步骤
(1)声明类结构
(2)明确类产生的对象是否需要有数据的存储:确定属性
(3)明确类产生的对象是否需要函数实现功能:确定方法
(4)明确类是否需要定义常量:确定类常量
(5)对象实例化
(6)类成员访问(属性和方法)
4、示例
(1)声明类结构
# 定义买家类:买家有姓名,有钱
class buyer{
# 属性声明
$name; # 错误,类内部属性必须使用访问修饰限定符
public $name; # 正确:没有赋值
public $money = 0; # 正确:有赋值
# 方法声明
function display(){
echo __CLASS__;# 魔术常量,输出类名
}
# 类常量声明
const BIG_NAME = 'BUYER';
}
数据定义属性来保留,可以赋值,也可以不赋值,因为有些东西能赋值,有些不能。只是有名字这个概念,但是没有具体的名字,所以没有赋值。方法可以不用 public 关键字来直接写也行,相当于前面有一个 public 类常量,一般类常量都是用大写的。
执行 02 member.php:
<?Php
#类成员
#定义买家类:买家有姓名,有钱
class Buyer{
#属性声明
#$name; #错误,类内部属性必须使用访问修饰限定符
public $name; # 正确:没有赋值
public $money =0:# 正确:有赋值
#方法声明
function display(){
echo _CLASS_;# 魔术常量,输出类名
}
#类常量声明
const BIG NAME "BUYER';
}
类不能运行
Parse error: syntax error,unexpectedT$name’(T VARIABLE), expecting function(TFUNCTION)or const(TCONST) in D:\server\ Web\02member.php on line 8
8 name 出现错误
(2)成员变量访问(属性和方法):成员必须通过对象才能进行访问,需要先通过实例化得到对象,然后通过对象实现对成员进行操作
属性和方法只能对象访问,所以必须要产生对象。
# 实例化对象
$b=new Buyer();
# 访问属性
echo $b->money;
# 修改属性
$b->money = 1000;
# 删除属性
unset($b->name);
# 新增属性
$b->age = 20;
# 访问方法
$b->display()
执行一下:
#实例化
$b = new Buyer();
#属性操作:增上改查
echo $b->money;
//结果:0 说明可以查看
$b->money = 10;
var_dump($b);
//结果:0object(BLyer)#1 (2) { ["name’]=> NULL ["money"]=> int(10) }
////2代表两个属性,name 没有值,因为没有赋值。Money 等于10说明修改成功,修改完之后已经有增删改查。
$b->money = 10;
$b->eyes = 1;
unset($b->name);
var_dump($b);
//$b->eyes = 1 的结果
0object(Buyer)#1 (3){ ["name"]=> NULL ["money"]=> int(10) ["eyes"]=> int(1) }
//unset($b->name) 删之后结果
0object(Buyer)#1(2){[" money"]=> int(10) ["eyes"]=> int(1) }
# 方法操作:调用
$b->display();
var_dump($b);
//结果:0Buyerobject(Buyer)#1(2){["money"]=>int(10)["eyes*]=> int(1) }
#var_dump($b);
//一刷新0Buyer
用到了魔术常量 _CLASS_,输出的是当前所在类的类名
注意:
①删除属性和新增属性通常使用较少,更多的属性操作是访问和修改
②类常量不是由对象来进行访问,所以暂时不做访问讲解,到后面知识再讲
③属性和方法的使用都必须确保类中已经定义(属性可以新增)
(3)类成员中:属性,类常量和方法都可以无限定义,但是定义的原则是相关性。除了以上三个类成员,不能在类结构{}中直接写其他任何代码
class buyer{
echo __CLASS__; # 错误
define('PI',3.14); # 错误
if(true){ echo "hello world'} # 错误
}
明确类里面能做一些事情有类成员,其他代码都不能写。代码的直属上级是 {,所以它属于类成员,类成员不允许,函数的调用也不允许判定语句更不允许,所以代码没有办法直接在里面写,但是可以写在类函数里。
5、小结
(1)PHP 类结构中有且仅有三种成员:属性、方法和类常量,其他直接属于类的内容都会报错
(2)类声明需要根据业务来确定类成员的存在和数量(有才写)
(3)类中属性和方法的访问方式都是通过对象来调用:对象->属性名/方法名();注意属性名不带$符号
(4)类中定义属性不能直接属性名,需要使用符号 public 修饰(访问修饰限定符中的一种)