PHP对象Object的概念 介绍

yipeiwu_com7年前PHP代码库
例如,员工管理应用程序可能包括一个EmPloyee 类。然后可以用这个类来创建和维护特定实例,比如Gonn和Sally。

根据预定义的类创建对象常称为类的实例化(class instantiation)。

对象使用new关键字创建,如下:

复制代码 代码如下:
$employee = new Employee();


创建对象之后,这个刚实例化的对象就具有了类中定义的所有性质和行为。

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

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()是真正的对象是在堆内存里面的。

等号右边是真正的对象实例,在堆内存里面的实体。这里一共有3次new Person(),所以会在堆里面开辟3个空间,产生3个实例对象,每个对象之间都是相互独立的,使用自己的空间,在PHP里面,只要有一个new这个关键字出现就会实例化出来一个对象,在堆里面开辟一块自己的空间。

每个在堆里面的实例对象是存储属性的,比如说,现在堆里面的实例对象里面都存有姓名、性别和年龄。每个属性又都有一个地址。$p1=new Person();等号的右边$p1是一个引用变量,通过赋值运算符“=”把对象的首地址赋给“$p1”这个引用变量,所以$p1是存储对象首地址的变量,$p1放在栈内存里边,$p1相当于一个指针指向堆里面的对象,所以我们可以通过$p1这个引用变量来操作对象,通常我们也称对象引用为对象。

相关文章

php 检查电子邮件函数(自写)

复制代码 代码如下: function is_valid_email_address($email){ $qtext = '[^//x0d//x22//x5c//x80-//xff]';...

PHP实现接收二进制流转换成图片的方法

本文实例讲述了PHP实现接收二进制流转换成图片的方法。分享给大家供大家参考,具体如下: 这里实现php 接收二进制流转换成图片,所使用的图片类imageUpload.php如下: &...

php你的验证码安全码?

php你的验证码安全码?

验证码的作用主要有防止暴力破解,防止恶意灌水,防止自动提交等,在这里我就不多说了。验证码的类型也有数字、字母等,甚至厉害点的还有中文的。但是不管你的验证码多么厉害,只要你在表单验证中存在...

phpstorm 正则匹配删除空行、注释行(替换注释行为空行)

phpstorm 正则匹配删除空行、注释行(替换注释行为空行)

使用phpstorm 来编写php 和javascript 代码,感觉还是不错的,用得也很舒服。 遇到了一个需求,有时候在阅读框架源代码的时候 , 想过滤(删除)掉源代码中的注释行,如果...

php microtime获取浮点的时间戳

一直以来用这个函数获取: 复制代码 代码如下: function microtime_float(){ list($usec, $sec) = explode(" ", microtim...