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


Posted in PHP onSeptember 30, 2009

5.如何实例化对象
我们上面说过面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,既然
我们类会声明了,下一步就是实例化对象了。
当定义好类后,我们使用new 关键字来生成一个对象。
代码片段

$对象名称= new 类名称(); 
<?php 
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()是真正的对象是在堆内存
里面的,具体的请看下图:
php面向对象全攻略 (二) 实例化对象 使用对象成员 
从上图可以看出$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();
如下面实例:
代码片段
<?php 
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.”<br>”; 
echo “p1对象的性别是:”.$p1->sex.”<br>”; 
echo “p1对象的年龄是:”.$p1->age.”<br>”; 
//下面两行访问$p1对象中的方法 
$p1->say(); 
$p1->run(); 
//下面三行是给$p2对象属性赋值 
$p2->name=”李四”; 
$p2->sex=”女”; 
$p2->age=30; 
//下面三行是访问$p2对象的属性 
echo “p2对象的名字是:”.$p2->name.”<br>” 
echo “p2对象的性别是:”.$p2->sex.”<br>”; 
echo “p2对象的年龄是:”.$p2->age.”<br>”; 
//下面两行访问$p2对象中的方法 
$p2->say(); 
$p2->run(); 
//下面三行是给$p3对象属性赋值 
$p3->name=”王五”; 
$p3->sex=”男”; 
$p3->age=40; 
//下面三行是访问$p3对象的属性 
echo “p3对象的名字是:”.$p3->name.”<br>”; 
echo “p3对象的性别是:”.$p3->sex.”<br>”; 
echo “p3对象的年龄是:”.$p3->age.”<br>”; 
//下面两行访问$p3对象中的方法 
$p3->say(); 
$p3->run(); 
?>

从上例中可以看出只是对象里面的成员就要使用对象->属性、对象->方法形式访问,再
没有第二种方法来访问对象中的成员了。
PHP 相关文章推荐
php中通过curl模拟登陆discuz论坛的实现代码
Feb 16 PHP
关于初学PHP时的知识积累总结
Jun 07 PHP
PHP使用feof()函数读文件的方法
Nov 07 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
了解PHP的返回引用和局部静态变量
Jun 04 PHP
php实现XSS安全过滤的方法
Jul 29 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
Mar 07 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
PHP7 新特性详细介绍
Sep 06 PHP
详解PHP中array_rand函数的使用方法
Sep 11 PHP
Laravel实现定时任务的示例代码
Aug 10 PHP
浅谈Laravel模板实体转义带来的坑
Oct 22 PHP
php面向对象全攻略 (一) 面向对象基础知识
Sep 30 #PHP
PHP5 操作MySQL数据库基础代码
Sep 29 #PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
Sep 29 #PHP
php 生成饼图 三维饼图
Sep 28 #PHP
php 不同编码下的字符串长度区分
Sep 26 #PHP
php 应用程序安全防范技术研究
Sep 25 #PHP
从Web查询数据库之PHP与MySQL篇
Sep 25 #PHP
You might like
我的论坛源代码(二)
2006/10/09 PHP
PHP+XML 制作简单的留言本 图文教程
2009/11/02 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
基于PHP对XML的操作详解
2013/06/07 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
2013/07/03 PHP
如何让CI框架支持service层
2014/10/29 PHP
php打乱数组二维数组多维数组的简单实例
2016/06/17 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
php合并数组并保留键值的实现方法
2018/03/12 PHP
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
js实现方块上下左右移动效果
2017/08/17 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
实例讲解JavaScript截取字符串
2018/11/30 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
安装docker-compose的两种最简方法
2019/07/30 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
python中数字是否为可变类型
2020/07/08 Python
python 使用递归的方式实现语义图片分割功能
2020/07/16 Python
Python request post上传文件常见要点
2020/11/20 Python
Grow Gorgeous美国官网:只要八天,体验唤醒毛囊后新生的茂密秀发
2018/06/04 全球购物
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
2014年公务员思想汇报范文:全心全意为人民服务
2014/03/06 职场文书
政府信息公开实施方案
2014/05/09 职场文书
2014年政教处工作总结
2014/12/20 职场文书
《曾国藩家书》读后感——读家书,立家风
2019/08/21 职场文书
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android