php类的实例化对象,php面向对象全攻略 (二) 实例化对象 使用对象成员

5.如何实例化对象

我们上面说过面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,既然

我们类会声明了,下一步就是实例化对象了。

当定义好类后,我们使用new 关键字来生成一个对象。

代码片段

$对象名称= new 类名称();

class Person{

//下面是人的成员属性

var $name; //人的名字

var $sex; //人的性别

var $age; //人的年龄

//下面是人的成员方法

function say(){

//这个人可以说话的方法

echo "这个人在说话";

} function run(){

//这个人可以走路的方法

echo "这个人在走路";

}

}

$p1=new Person();

$p2=new Person();

$p3=new Person();

?>

$p1=new Person();

这条代码就是通过类产生实例对象的过程,$p1 就是我们实例出来的对象名称,同理,$p2,

$p3 也是我们实例出来的对象名称,一个类可以实例出多个对象,每个对象都是独立的,上

面的代码相当于实例出来3 个人来,每个人之间是没有联系的,只能说明他们都是人类,每

个人都有自己的姓名,性别和年龄的属性,每个人都有说话和走路的方法,只要是类里面体

现出来的成员属性和成员方法,实例化出来的对象里面就包含了这些属性和方法。

对像在PHP 里面和整型、浮点型一样,也是一种数据类,都是存储不同类型数据用的,

在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢?内存从逻辑上

说大体上是分为4 段,栈空间段、堆空间段、代码段、初始化静态段,程序里面不同的声明

放在不同的内存段里面,栈空间段是存储占用相同空间长度并且占用空间小的数据类型的地

方,比如说整型1,10,100,1000,10000,100000 等等,在内存里面占用空间是等长的,

都是64 位4 个字节。那么数据长度不定长,而且占有空间很大的数据类型的数据放在那内存

的那个段里面呢?这样的数据是放在堆内存里面的。栈内存是可以直接存取的,而堆内存是

不可以直接存取的内存。对于我们的对象来数就是一种大的数据类型而且是占用空间不定长

的类型,所以说对象是放在堆里面的,但对象名称是放在栈里面的,这样通过对象名称就可

以使用对象了。

$p1=new Person();

对于这个条代码,$p1 是对象名称在栈内存里面,new Person()是真正的对象是在堆内存

里面的,具体的请看下图:

20090930215213451.gif

从上图可以看出$p1=new Person();等号右边是真正的对象实例,在堆内存里面的实体,

上图一共有3 次new Person(),所以会在堆里面开辟3 个空间,产生3 个实例对象,每个对象

之间都是相互独立的,使用自己的空间,在PHP 里面,只要有一个new 这个关键字出现就会

实例化出来一个对象,在堆里面开辟一块自己的空间。

每个在堆里面的实例对象是存储属性的,比如说,现在堆里面的实例对象里面都存有姓

名、性别和年龄。每个属性又都有一个地址。

$p1=new Person();等号的右边$p1 是一个引用变量,通过赋值运算符“=”把对象的首地址

赋给“$p1”这个引用变量,所以$p1 是存储对象首地址的变量,$p1 放在栈内存里边,$p1 相当

于一个指针指向堆里面的对象,所以我们可以通过$p1 这个引用变量来操作对象,通常我们也

称对象引用为对象。

6.如何去使用对象中的成员

上面看到PHP 对象中的成员有两种一种是成员属性,一种是成员方法。对象我们以经可

以声明了,$p1=new Person();怎么去使用对象的成员呢?要想访问对象中的成员就要使用一个

特殊的操作符“->”来完成对象成员的访问:

对象->属性$p1->name; $p2->age; $p3->sex;

对象->方法$p1->say(); $p2->run();

如下面实例:

代码片段

class Person{

//下面是人的成员属性

var $name; //人的名字

var $sex; //人的性别

var $age; //人的年龄

//下面是人的成员方法

function say(){ //这个人可以说话的方法

echo "这个人在说话";

}

function run(){ //这个人可以走路的方法

echo "这个人在走路";

}

}

$p1=new Person(); //创建实例对象$p1

$p2=new Person(); //创建实例对象$p2

$p3=new Person(); //创建实例对象$p3

//下面三行是给$p1对象属性赋值

$p1->name=”张三”;

$p1->sex=”男”;

$p1->age=20;

//下面三行是访问$p1对象的属性

echo “p1对象的名字是:”.$p1->name.”
”;

echo “p1对象的性别是:”.$p1->sex.”
”;

echo “p1对象的年龄是:”.$p1->age.”
”;

//下面两行访问$p1对象中的方法

$p1->say();

$p1->run();

//下面三行是给$p2对象属性赋值

$p2->name=”李四”;

$p2->sex=”女”;

$p2->age=30;

//下面三行是访问$p2对象的属性

echo “p2对象的名字是:”.$p2->name.”

echo “p2对象的性别是:”.$p2->sex.”
”;

echo “p2对象的年龄是:”.$p2->age.”
”;

//下面两行访问$p2对象中的方法

$p2->say();

$p2->run();

//下面三行是给$p3对象属性赋值

$p3->name=”王五”;

$p3->sex=”男”;

$p3->age=40;

//下面三行是访问$p3对象的属性

echo “p3对象的名字是:”.$p3->name.”
”;

echo “p3对象的性别是:”.$p3->sex.”
”;

echo “p3对象的年龄是:”.$p3->age.”
”;

//下面两行访问$p3对象中的方法

$p3->say();

$p3->run();

?>

从上例中可以看出只是对象里面的成员就要使用对象->属性、对象->方法形式访问,再

没有第二种方法来访问对象中的成员了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值