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. 阿里云 mysql 远程登录权限

    [mysql中配置] 授权法: 1.登录到mysql中,为root进行远程访问的授权,执行下面的命令:  mysql> GRANT ALL PRIVILEGES ON *.* TO root@& ...

  2. git服务器搭建问题

    CentOS6.5本地搭建. 对于图形化的系统,可以联网,然后CTRL+ALT+F2可以切换到命令行,CTRL+ALT+F1可以切换回桌面图形化. 可以用SSH和FTP来连接服务器和传文件.   (1 ...

  3. MySQL 基础常用命令

    一.启动与关闭 1.1 Linux下启动mysql 的命令: a. rpm包安装:service mysqld start b. 源码包安装:/usr/local/mysql/bin/mysqld_s ...

  4. java程序员应该熟悉的20个有用的库(转)

    优秀且经验丰富的Java开发人员的一个特点是API的广泛知识,包括JDK和第三方库.我花了很多时间学习API,特别是在阅读Effective Java 3rd Edition之后,Joshua Blo ...

  5. Windows 10 归档、对于一些问题的解决与软件推荐

    I'm a Windows Insider 最近加入了 Windows Insider 计划,主要目的还是为了体验一下马上(7.29)就要发售的 Windows 10 操作系统. 先简要介绍下 Win ...

  6. android-tip-关于SpannableString的使用

    如果想单独设置TextView上其中几个字的样式,该怎么办? 答案是使用SpannableString. 使用SpannableString可以为TextView上的某字或某些字设置: 前景色(For ...

  7. http协议简析(一)

    HTTP:hype-text transfer protocol,超文本传输协议,超文本(html)在网络间(电脑与电脑之间)传输过程中所遵循的一些规则. 两台电脑之间要实现数据传输的条件 1.两台电 ...

  8. 关于防SQL注入敏感词过滤问题

    关于对字符的过滤问题sql查询条件过滤掉单引号是否就安全了呢? 在文章最后一段管理员做了敏感字符的过滤,管理员过滤掉了空格,而攻击者通过 /**/ 来代替空格绕过了过滤字符.感觉很有成就感,呵呵呵呵. ...

  9. code1796 社交网络

    输入描述 Input Description 输入文件中第一行有两个整数,n 和 m,表示社交网络中结点和无向边的数 目.在无向图中,我们将所有结点从 1 到 n 进行编号. 接下来 m 行,每行用三 ...

  10. jqgrid 单元格放超链接文本

    .前台 <%-- builed by manage.aspx.cmt [ver:] at // :: --%> <%@ Page Language="C#" Au ...