1,php中基本数据类型存在于栈区,对象这种数据类型存在于堆区;

比如如下代码,两个指针指向同一个对象,其输出相同

<?php
/**
* Created by PhpStorm.
* User: usa007lhy
* Date: 2015/10/15
* Time: 21:38
*/
//定义一个类描述人
class Person{
public $name;
public $age;
}
$c = 90;
$a = new Person();
$a->name = '小明';
$a->age = 20;
$b = $a;
echo $a->name."<br/>";
echo $b->name."<br/>";
?>

  其输出

代码对应的内存变化如下图:

2,如果给一个函数传递一个对象,实际传递的是一个地址,指向对象的地址;如果给函数传递的是基本数据类型(整数、小数、布尔、字符串),传递的是值;如果给函数传递的是数组,传递的是值;

3,php中构造方法

php存在两种构造方法,(1)构造函数名和类名相同,此方法一直通用;(2)public function __construct(){},此方法是php5版本新提出来的,在php4及之前版本没法使用。如果两种方法同时存在,优先选择第二种方法__construct()。在编程过程中,优先使用第二种构造方法。

<?php
class Person{
public $name;
public $age;
public function __construct(){
echo "我是新的构造方法,优先级高于第二种方法";
}
public function Person(){
echo "我是旧的构造方法,优先级低于第一种方法";
}
}
$p1 = new Person();
?>

  构造方法的特点:

(1),一旦自定义了一个构造函数,默认的构造函数就会失效;

(2),一个类只有一个构造函数;java中一个类可以通过重载有多个构造函数;

(3),构造方法没有返回值;

(4),构造函数作用是完成对对象的初始化,并不是创建对象本身;

(5),在创建对象后,系统自动调用该类的构造方法;

(6),构造方法的默认访问修饰符是public;

4,php中析构方法

析构方法的调用时间:
(1)当程序退出时(进程结束时);
(2)当一个对象成为垃圾对象(没有指针指向的对象称为垃圾对象)时候,系统立即调用析构函数;

析构方法的特点
(1)析构方法会自动调用;
(2)析构方法的主要作用是释放资源(比如释放数据库的链接,图片资源,销毁对象等);
(3)析构函数不写上去,程序不会执行析构函数;
(4)析构函数没有返回值,没有参数;
(5)一个类最多只有一个析构方法;
(6)析构方法调用顺序是,先创建的对象后被销毁;

php对象在内存中存在形式的更多相关文章

  1. JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式

    相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...

  2. JVM中,对象在内存中的布局

    在hotSpot虚拟机中,对象在内存中的布局可以分成对象头.实例数据.对齐填充三部分. 对象头:主要包括: 1.对象自身的运行行元数据,比如哈希码.GC分代年龄.锁状态标志等,这部分长度在32位虚拟机 ...

  3. java对象在内存中的结构

    在HotspotJVM中,32位机器下,Integer对象的大小是int的几倍? 我们都知道在java语言规范已经规定了int的大小是4个字节,那么Integer对象的大小是多少呢?要知道一个对象的大 ...

  4. java对象在内存中的结构(HotSpot虚拟机)

    一.对象的内存布局 HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header).实例数据(Instance Data)和对齐填充(Padding). 从上面的这张图里面可以 ...

  5. java对象在内存中的分配

    java对象在内存中的分配 http://blog.csdn.net/qq_30753945/article/details/54974899

  6. JVM运行时数据区及对象在内存中初始化的过程

    JVM运行时数据区 Java虚拟机所管理的内存区域,也称为运行时数据区,分为以下几个运行时数据区,如图所示 程序计数器:当前程序所执行字节码的行号指示器 程序计数器(Program Counter R ...

  7. Java中对象在内存中的大小、分配等问题

    Java创建一个对象的过程 是否对象指向的类已经加载到内存了 如果没有加载,就要经过load.linking(verification.preparation.resolution).initiali ...

  8. PHP面向对象(PHP对象在内存中的分配)

    对 像在PHP 里面和整型.浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢?内存从逻 辑上 说大体上是分为4 段,栈空间段. ...

  9. Python中类和对象在内存中是如何保存?

    类以及类中的方法在内存中只有一份,而根据类创建的每一个对象都在内存中需要存一份,大致如下图: 如上图所示,根据类创建对象时,对象中除了封装 name 和 age 的值之外,还会保存一个类对象指针,该值 ...

随机推荐

  1. bash's parameter expansion

    [bash's parameter expansion] #: find first from left, remove-left ##: find last from left, remove le ...

  2. S数据导入

    一. 职责下的视图导入先对比UAT172和PROD 177的数据,若177比172多的数据进行删除,若172比177多的数据,重新加入到177. 1.删除177多余的 搜索一个177比172多的,进行 ...

  3. 第五章 大数据平台与技术 第13讲 NoSQL数据库

    NoSQL不是不用SQL,是Not only SQL,不仅仅是结构化的查询. NoSQL兴起的原因 在Web2.0时代新浪一分钟可以发送两万条微博,苹果可以下载4.7万次应用. 数据的高并发性,同时有 ...

  4. 微信小程序文档里看不到的小Tips

    前几天折腾了下.然后列出一些实验结果,供大家参考. 0. 使用开发工具模拟的和真机差异还是比较大的.也建议大家还是真机调试比较靠谱. 1. WXML(HTML) 1.1 小程序的WXML没有HTML的 ...

  5. telnet客户端模拟浏览器发送请求

    telnet 客户端 telnet客户端能够发出请求去连接服务器(模拟浏览器) 使用telnet之前,需要开启telnet客户端 1.进入控制面板 2.进入程序和功能,选择打开或关闭windows功能 ...

  6. Qt程序无法输入中文的问题

    问题 在Linux环境下,用Qt编写的程序运行时不能在诸如输入框.文本框中输入中文(不会激活中文输入法). 注意与输入法类型有关(基于iBus或Fcitx) 原因 Qt程序的中文输入支持需要用Qt插件 ...

  7. Python使用signal模块实现定时执行

    在liunx系统中要想每隔一分钟执行一个命令,最普遍的方法就是crontab了,如果不想使用crontab,经同事指点在程序中可以用定时器实现这种功能,于是就开始摸索了,发现需要一些信号的知识... ...

  8. 回顾2017系列篇(五):人工智能给UI/UX设计带来的影响

    如今,我们正处于设计新纪年的转折点上,用机器人和人工智能方面的专家说法表达即“The end is near(终点近了)”.但这并不意味着世界末日,但未来机器人将毫无疑问地接管一部分目前被人类占领的工 ...

  9. osgQt支持触摸屏

    1. osgQt的构造函数添加:setAttribute(Qt::WA_AcceptTouchEvents);//wyh 2. event()修改,支持触摸时间 bool GLWidget::even ...

  10. libxml2

    http://www.xmlsoft.org/downloads.html   建议直接用openscenegraph下载的3rdparty:http://www.openscenegraph.org ...