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 相关文章推荐
DISCUZ 论坛管理员密码忘记的解决方法
May 14 PHP
用穿越火线快速入门php面向对象
Feb 22 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 PHP
跟我学Laravel之请求与输入
Oct 15 PHP
php进行支付宝开发中return_url和notify_url的区别分析
Dec 22 PHP
PHP+APACHE实现网址伪静态
Feb 22 PHP
PHP中把有符号整型转换为无符号整型方法
May 27 PHP
适合PHP初学者阅读的4本经典书籍
Sep 23 PHP
PHP 闭包详解及实例代码
Sep 28 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
Laravel自动生成UUID,从建表到使用详解
Oct 24 PHP
PHP const定义常量及global定义全局常量实例解析
May 28 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
PHP 字符串分割和比较
2009/10/06 PHP
PHP print类函数使用总结
2010/06/25 PHP
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
php FLEA中二叉树数组的遍历输出
2012/09/26 PHP
显示程序执行时间php函数代码
2013/08/29 PHP
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
基于jQuery的公告无限循环滚动实现代码
2012/05/11 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
2013/06/18 Javascript
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
2015/06/03 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
Vue实现简易翻页效果源码分享
2018/11/08 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
2019/10/11 Javascript
JavaScript实现网页下拉菜单效果
2020/11/20 Javascript
[02:42]岂曰无衣,与子同袍!DOTA2致敬每一位守护人
2020/02/17 DOTA
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
如何利用Fabric自动化你的任务
2016/10/20 Python
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
Django之路由层的实现
2019/09/09 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
简单了解Python write writelines区别
2020/02/27 Python
HTML5 LocalStorage 本地存储详细概括(多图)
2017/08/18 HTML / CSS
幼儿园亲子活动总结
2014/04/26 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
员工工作表现自我评价
2015/03/06 职场文书
体检通知范文
2015/04/21 职场文书
慈善献爱心倡议书
2015/04/27 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
幼儿园体操比赛口号
2015/12/25 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers
Java 数据结构七大排序使用分析
2022/04/02 Java/Android