7.3.2 PHP画图理解对象在内存中的形式
当定义好类后,我们使用new关键字来生成一个对象。
$对象名称 = new 类名称();
$对象名称 = new 类名称([参数列表]);
由于对象资料封装的特性,对象属性(类中定义的变量)是无法由主程序区块直接来访问的,必须通过对象来调用类中所定义的属性和行为函数,间接地达成存取控制类中资料的目的。
<?php
//声明一个电话类Phone
class Phone {
//类中成员同上(略)
}
// 声明一个人类Person
class Person {
//类中成员同上(略)
}
//通过Person类实例化三个对象$person1、$person2、$person3
$person1 = new Person(); //创建第一个Person类对象,引用名为$person1
$person2 = new Person(); //创建第二个Person类对象,引用名为$person2
$person3 = new Person(); //创建第三个Person类对象,引用名为$person3
//通过Phone类实例化三个对象$phone1、$phone2、$phone3
$phone1 = new Phone(); //创建第一个Phone类对象,引用名为$phone1
$phone2 = new Phone(); //创建第二个Phone类对象,引用名为$phone2
$phone3 = new Phone(); //创建第三个Phone类对象,引用名为$phone3
对象中成员的访问
类中包含成员属性与成员方法两个部分,我们可以使用“new”关键字来创建一个对象,即:$引用名 = new 类名(构造参数);那么我们可以使用特殊运算符“->”来访问对象中的成员属性或成员方法。如:
$引用名 = new 类名(构造参数);
$引用名->成员属性=赋值; //对象属性赋值
echo $引用名->成员属性; //输出对象的属性
$引用名->成员方法(参数);//调用对象的方法
如果对象中的成员不是静态的,那么这是唯一的访问方式。
对象和类的关系:
对象是实际存在的,占有动态资源。
类是对象的蓝图,可能占有静态资源。
对象属性占有动态资源
类(静态)属性实际上是有类名字空间上的“全局变量”
性能考虑:
每个对象要单独占用数据空间
增加的调用层次可能消耗执行时间
boyfriend.class.php
<?php
/*
* 属性
* 性别:男
* 年龄: 24
* 身高: 175cm
* 眼睛: 大
*
*
* 行为
*
* 做饭
* 做家务
*
* class 类名 {
*
*
* }
*
* 注意: 在类的成员属性前面一定要有一个修饰词, 如果不知道使用什么修饰词, 就可以使用var (关键字), 如果一旦有其它的修饰词就不要有var
*
*/
class BoyFriend {
//变量 (成员属性)
var $name = "gaoluofeng";
var $age = 24;
var $sex = "男";
var $height = "175cm";
var $eye = "big";
//函数 (成员方法)
public function doFan($rou, $cai) {
return "做饭的功能<br>";
}
function doJW() {
return "做家务的功能<br>";
}
}
$bf1 = new BoyFriend();
$bf1 -> name = "张三";
$bf2 = new BoyFriend;
$bf2 -> name = "李四";
echo $bf1->sex."<br>";
echo $bf2->height."<br>";
echo $bf1 -> dofan("牛肉", "土豆");
echo $bf2 -> dojw();
test.php
<?php
include "boyfriend.class.php";