专栏首页python3php面向对象教程3

php面向对象教程3

5.如何实例化对象 我们上面说过面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,既然我们类 会声明了,下一步就是实例化对象了。 当定义好类后,我们使用new 关键字来生成一个对象。 $对象名称= new 类名称(); <?php class Person { //下面是人的成员属性 var $name; //人的名字 var $sex; //人的性别 var $age; //人的年龄 //下面是人的成员方法 function say() //这个人可以说话的方法 { echo "这个人在说话"; }f unction 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()是真正的对象是在堆内存里面 的,具体的请看下图: 从上图可以看出$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 "这个人在说话"; }f unction 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>”; LAMP 大讲堂PHP 面向对象技术(全面讲解) echo “p3对象的年龄是:”.$p3->age.”<br>”; //下面两行访问$p3对象中的方法 $p3->say(); $p3->run(); ?> 从上例中可以看出只是对象里面的成员就要使用对象->属性、对象->方法形式访问,再没有第 二种方法来访问对象中的成员了

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • django-7-django模型系统

    py3study
  • python插件 docker buil

         由于公司线上安全要求,不能直接使用pip安装,也没有自行部署pypi源,于是有了此篇文章。本文主要以etcd3插件为示例。

    py3study
  • 原程序运行良好,Pyinstaller

    昨天决定分享一下最近写的exhentai爬虫程序,参考了这篇文章,看了下里面几个常见打包软件的简介表格(可惜没nuitka) 因为是给小白用户使用,做成单个文件...

    py3study
  • 深入分析IE地址栏内容泄露漏洞

    ? 前言 在本文中,我们探讨的对象是IE浏览器,尽管该浏览器略显老态,但是其用户还是很多的,所以不容忽视。我最近对MSRC感到很欣喜,因为他们正在将工作重心移...

    FB客服
  • ICLR 2020将采用远程会议,首次在非洲办会可能就这样泡汤了

    昨晚,ICLR官方在Twitter上正式宣布,考虑到今年很多人难以参会,将增加远程会议,至于线下会议是否取消,具体计划将在下周一公布。

    量子位
  • 云存储管理的9个免费工具

    云计算的概念还不算太旧,却已很好地适应于世界各地。现在许多基于云的可用服务,已经开始大规模地流行起来。不少商人和企业家正在使用这些基于云的服务,因为即便他们不在...

    静一
  • vue实现文章内容过长点击阅读全文功能

    直接上代码: html: <div class="bodyFont clearfloat" id="bodyFont" ref="bodyFont" :clas...

    蓓蕾心晴
  • FlaskJinja2 开发中遇到的的服务端注入问题研究 II

    0x00. 前言 本篇文章是 《Flask Jinja2 开发中遇到的的服务端注入问题研究》<点击阅读原文查看链接>续篇,我们继续研究 Flask Jinja...

    FB客服
  • Jsp内置对象及EL表达式的使用

    一、JSP的内置对象(9个JSP内置对象) JSP的内置对象引用名称   对应的类型 request          HttpServletReques...

    欠扁的小篮子
  • 如何建立膜蛋白体系的动力学模型

    用户2493118

扫码关注云+社区

领取腾讯云代金券