对象创建的基本形式
方式1:
$对象名1 = new 类名(); //对象名就是变量名;类是应该定义过了
方式2:
方式3:
$对象名3 = new self; //self指代类本身,这行代码只能在类内部方法中使用。
方式4:通过对象创建对象
• new 对象名;//创建该对象所属类的一个新对象
对象的传值
回顾:
php中,变量传值方式有2个:
值传递: 传递的时候,拷贝的是数据本身。默认都是值传递。
结果:传递完之后,有了2份同样的数据,但两个变量“相互独立”没有关系。
引用传递: 传递的时候,拷贝的是引用关系。需要使用“&”才能实现引用传递。
结果:传递完之后,数据仍然只有一份,但是两个变量共同指向该数据。
则在面向对象这个层面,基本来说,仍然如此:
默认是值传递:
可以使用引用传递:
先观察一个现象:
可见,对象变量进行普通传值的时候,复制的是对象变量中所存储的“对象标识符”
那么,我们断开
p1跟其存储的数据(标识符)之间的关系,结果是:
p2还有效:
可见
p1和
p2之间是值传递。
再来对比看看引用传递:
静态属性
在定义属性的时候,前面加上关键字:static,此时就是静态属性。
静态属性有什么用?
对比来说:一般属性,他的值是隶属于该类的具体某个对象(虽然定义在类中),或者说,每个对象的同样的属性的值,有可能不一样。
静态属性就是:只隶属于类本身——也可以看做是所有对象的“共有数据”。
静态属性的使用:
通过特殊的语法:::(双冒号语法,也叫范围解释符)
类::$静态属性名;
对比普通属性的使用:
对象->普通属性名; //普通属性也可以叫做“实例属性”,相应的,对象也叫“实例”
实际上,通过对象也可以使用静态属性(但属于最新的语法,也不推荐):
构造方法
构造方式是类中的一个“特殊”方法,其作用是在实例化一个对象的同时,给该对象的属性赋值,使之一创建完成,就具有了其本身的特有数据(属性值)。
1,该方法名字是固定的,为:__construct();
2,该方法必须是普通方法(不能是静态方法)
3,通常该方法应该是public
4,通常该方法中使用$this这个关键字来对属性进行赋值
5,当new 类名()的时候,其实是在调用该构造方法
6,如果一个类中定义了构造方法,则实例化该类时就会调用该方法,且实例化时的参数需要跟构造方法的参数匹配
结果为: