类和对象的创建,类的普通属性,类的静态属性,类常量

在这里插入图片描述
显示结果为:
在这里插入图片描述
在这里插入图片描述
然后再显示为:
在这里插入图片描述
属性和方法
原来的做法(面向过程):
在这里插入图片描述
现在的做法(面向对象):
在这里插入图片描述
可见:
属性:就是原来的“变量”,只是现在它“隶属于”一个类了,即写在一个类中,就称为属性;
方法:就是原来的“函数”,只是现在它“隶属于”一个类了,即写在一个类中,就称为方法;
注意:属性和方法,已经不能“自由使用”了,而是都要通过这个类或这个类的对象去使用。
使用属性,就把它当做一个“变量”去使用就好了,只是需要该形式:对象->属性名;
使用方法,就把它当做一个“函数”去使用就好了,只是需要该形式:对象->函数名(实参列表…)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果为:
在这里插入图片描述
创建对象的几种形式

class  C1{
	var  $p1 = 1;	//定义一个属性;
}
形式1:
$o1 = new C1();	//通过一个类,去new出一个对象
形式2:
$o2 = new $o1();	//通过一个对象,去new出一个对象——其实是new出来的是旧对象所述类的一个新对象。
形式3:
$s1 = “C1”;	//只是一个字符串变量而已;
$o3 = new $s1();	//这就是所谓的“可变类”——无非就是类的名字是一个变量而已。

形式4:
$o4 = new  self();	//self表示“当前类本身”,它只能出现在一个类的方法中。

对象的传值方式:
在这里插入图片描述
为什么对于对象,值传递和引用传递,这个情况下,他们似乎没有区别???
这要从对象的数据的存储方式来理解:
$o1 = new C1(); //这里创建一个对象o1,其存储结果如图所示:
在这里插入图片描述

这里,实际上,变量$o1中,存储的数据只是一个“对象编号#1”,这个对象编号,才会去指向对象数据new C1(); 该编号数据,我们不能控制,只是系统内部的分配。
则$o2 = $o1; 作为值传递,实际复制的是该对象的编号:结果情形是:
在这里插入图片描述

在语法上,对对象变量进行的属性进行操作,其实就是通过该编号来指向对象而操作的。
$o1->p1 = 2; //此时,就是通过对象编号#1去修改了对象(new C1() )本身的内部数据.
echo $o2->p1; //此时相当于取得变量$o2所包含的编号#1中所指向的对象(new C1() )的内部数据p1
那么,对应引用传递,情况是这样的:
$o3 = new C1(); //又创建一个对象,图示如下:
在这里插入图片描述
然后:
$o4 = & $o3; //引用传递,则其后,他们的关系图示为:
在这里插入图片描述
所以:
$o3->p1 = 2; //
echo $o4->p1; //输出2

类的形式
类中成员分为3大类:
属性:
方法:
常量:
形式上,大致如下:
class 类名 {
常量定义1;
常量定义2;

属性定义1;
属性定义2;

方法定义1;
方法定义2;

}
说明:
以上各项,没有顺序问题;习惯上,其实常量放前面,然后是属性,然后是方法;
详细一点,就又分为:
属性:
普通属性;//一般属性,实例属性
静态属性;
方法:
普通方法;//一般方法,实例方法
静态方法;
构造方法;
析构方法;
常量:
类常量
当在一个类中定义一个常量时,该常量就称为“类常量”——本质其实还是常量;
定义形式:
class 类名{
const 常量名 = 常量值;
//不可以使用define()来定义!
}
使用形式:
常量的使用,是通过类名,并使用范围解析符(::)来取用的;
类名::常量名;
举例:
在这里插入图片描述
普通属性(实例属性):
实例的单词为:instance
实例,其实也叫做“对象”;
普通(实例)属性,就是一个可以在该类实例化出的对象上使用的属性!

定义形式:
class 类名{
var $属性名 = 初始值;
var $属性名; //这个属性没有初始值;
//上述的var 还可以使用public来代替,比如:
public $属性名 = 初始值;
public $属性名; //这个属性没有初始值;
}

使用形式:
是通过该类的对象,来使用普通属性(实例属性):
$对象->属性名;
因为,属性的本质就是变量,则其就可以当做一个变量来看待和使用,比如:
$v1 = $对象->属性名;
echo $对象->属性名;
$v2 = $对象->属性名 * 3 + 5; //进行计算

静态属性:
静态属性,本质上也是“变量”,但其有一个特点就是:该变量只隶属于“类”,即:
一个类中的一个静态属性,就只有“一份数据”;
但:
一个类中的一个实例属性,就可以有“多份数据”——每创建一个对象出来,就会有一份数据;
定义形式:

class  类名{
	static   $属性名  =  初始值;
	static   $属性名;//这个属性没有初始值;
}

使用形式:
使用类名和范围解析符(::)来对静态属性进行操作:
类名::$静态属性名;//注意:属性名带$符号
对比1:
常量的使用:类名::常量名;
对比2:
实例属性的使用:对象名->实例属性名; //注意:属性名不带$符号
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_37171379/article/details/86774770
今日推荐