搜索
首页后端开发php教程PHP面向对象(OOP)之如何实例化对象?

面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,既然我们类会声明了,下一步就是实例化对象了。下面我们就给大家介绍如何实例化对象。

PHP面向对象(OOP)之如何实例化对象?

当定义好类后,我们使用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段, 栈空间段, 堆空间段代码段 初使化静态段

①.栈空间段

栈的特点是空间小但被CPU访问的速度快,是用户存放程序中临时创建的变量。由于栈的后进先出特点,所以栈特别方便用来保存和恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个临时数据寄存、交换的内存区。用于存储占用空间长度不变并且占用空间小的数据类型的内存段,例如整型1、100、10000等在内存中占用空间是等长的,占用空间都是32位的4个字节。还有double、boolean等都可以存储在栈空间段中。

②.堆空间段

堆是用于存放进程运行中被动态分配的内存段,它大小并不固定,可动态扩张或缩减。用于存储数据长度可变或占用内存比较大的数据。例如,字符串、数组和对象就存储在这段内存中。

③.数据段

数据段用来存放可执行文件中初始化全局变量,换句话说就是存放程序静态分配的变量。

④.代码段

代码段是用来存放可执行文件的操作指令,也就是说它是可执行程序在内存中的镜像。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作。例如程序中的函数就存储在这段内存中。

对象类型的数据就是一种占用空间比较大的数据类型,并且是占用的空间不定长的数据类型,所以对象创建完成以后被存放在对内存中,但对象的引用还是存放在栈里面的。程序在运行时,占内存中的数据是可以直接存取的,而堆内存是不可以直接存取的内存,但可以通过对象的引用名称访问对象中的成员。

程序里面不同的声明放在不同的内存段里面,

栈空间段是存储占用相同空间长度并且占用空间小的数据类型的地方,比如说整型1, 10, 100, 1000, 10000, 100000等等,在内存里面占用空间是等长的,都是64位4个字节。

那么数据长度不定长,而且占有空间很大的数据类型的数据放在那内存的那个段里面呢?这样的数据是放在堆内存里面的。

栈内存是可以直接存取的,而堆内存是不 可以直接存取的内存。

对于我们的对象来说就是一种大的数据类型而且是占用空间不定长的类型,所以说对象是放在堆里面的,但对象名称是放在栈里面的,这样通 过对象名称就可以使用对象了。

$p1=new Person();

对于这个条代码, $p1是对象名称在栈内存里面,new Person()是真正的对象是在堆内存里面的,具体的请看下图:

8ff54043f0cee03c1328cbed1099b2b.png

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

每个在堆里面的实例对象是存储属性的,比如说,现在堆里面的实例对象里面都存有姓名、性别和年龄。每个属性又都有一个地址。

$p1=new Person();等号的左边$p1是一个引用变量,通过赋值运算符“=”把对象的首地址赋给“$p1“这个引用变量, 所以$p1是存储对象首地址的变量,$p1放在栈内存里边,$p1相当于一个指针指向堆里面的对象, 所以我们可以通过$p1这个引用变量来操作对象, 通常我们也称对象引用为对象。

 验证:

class Person{
  public $name;
}

$obj1 = new Person();
$obj1->name = "test1";
echo $obj1->name;
$obj2 = $obj1;
$obj2->name = "test2";
echo $obj1->name;
echo $obj2->name;

通过测试结果来看,解释是对的。

$p1 是对象的指针而不是对象本身 obj2和 obj1都指向同一块内存同一个对象这一点和OOP语言是一样

object(Person)[2] 
public &#39;name&#39; => string &#39;test2&#39; (length=5)
object(Person)[2]
public &#39;name&#39; => string &#39;test2&#39; (length=5)

可见对象的ID号是一个

如果想得到一个对象的副本,用$obj2 =clone $obj1;  用了clone后会产生一个新对象,分配内存,独立于原来的obj1
参见手册此页  http://www.php.net/manual/zh/language.oop5.cloning.php

$obj2 = $obj1;
$obj2 = &$obj1;

一样的效果,一样的解释?
对于object来说,是一样的。 对于普通的变量是不一样的。

$a = 1;
$b = $a;
$c = &$a;

不一样的 

以上是PHP面向对象(OOP)之如何实例化对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:cnblogs。如有侵权,请联系admin@php.cn删除
深入解读PHP面向对象的封装性深入解读PHP面向对象的封装性Aug 11, 2023 am 11:00 AM

深入解读PHP面向对象的封装性封装是面向对象编程的三大特征之一,它是指将数据和对数据的操作封装在一个类中,对外部程序隐藏具体的实现细节,提供对外的接口。在PHP中,通过使用访问修饰符(public、protected、private)来控制属性和方法的可访问性,实现封装的概念。首先,我们来了解一下访问修饰符的作用:public(公开的):公开的属性和方法可以

如何通过PHP面向对象简单工厂模式实现对象的版本控制和管理如何通过PHP面向对象简单工厂模式实现对象的版本控制和管理Sep 06, 2023 pm 02:39 PM

如何通过PHP面向对象简单工厂模式实现对象的版本控制和管理在开发大型的、复杂的PHP项目时,版本控制和管理是非常重要的一环。通过适当的设计模式,我们可以更好地管理和控制对象的创建和使用,从而提高代码的可维护性和扩展性。本文将介绍如何使用PHP面向对象简单工厂模式来实现对象的版本控制和管理。简单工厂模式是一种创建类的设计模式,它通过一个工厂类来实例化指定的对象

如何使用PHP面向对象简单工厂模式创建灵活的对象实例如何使用PHP面向对象简单工厂模式创建灵活的对象实例Sep 06, 2023 pm 02:12 PM

如何使用PHP面向对象简单工厂模式创建灵活的对象实例简单工厂模式是一种常见的设计模式,它可以在不暴露对象创建逻辑的情况下创建对象实例。这种模式可以提高代码的灵活性和可维护性,特别适用于需要根据输入条件动态创建不同对象的场景。在PHP中,我们可以利用面向对象编程的特性来实现简单工厂模式。下面我们来看一个例子,假设我们需要创建一个图形计算器,能够根据用户输入的形

在PHP开发中如何掌握面向对象编程技巧在PHP开发中如何掌握面向对象编程技巧Jun 25, 2023 am 08:05 AM

随着互联网的发展,PHP逐渐成为Web开发中最受欢迎的编程语言之一。然而,跟随PHP的快速发展,面向对象编程已成为PHP开发中必备的技能之一。在本文中,我们将讨论如何在PHP开发中掌握面向对象编程技巧。理解面向对象编程的概念面向对象编程是一种编程范式,它通过使用对象(类、属性和方法)来组织代码和数据。在面向对象编程中,代码被组织成可重用的模块,从而提高程序的

理解PHP面向对象的继承机制理解PHP面向对象的继承机制Aug 10, 2023 am 10:40 AM

理解PHP面向对象的继承机制继承是面向对象程序设计中一个重要的概念,它允许创建新的类,其中包括旧类的特性和功能。在PHP中,继承可以通过关键字extends实现。通过继承,子类可以继承父类的属性和方法,并且可以添加新的属性和方法,或者重写继承的方法。让我们通过一个示例来理解PHP面向对象的继承机制。classAnimal{public$name

如何通过PHP面向对象简单工厂模式实现对象的无缝切换和替换如何通过PHP面向对象简单工厂模式实现对象的无缝切换和替换Sep 06, 2023 am 08:01 AM

如何通过PHP面向对象简单工厂模式实现对象的无缝切换和替换简介:在PHP开发中,面向对象编程(Object-orientedProgramming,简称OOP)是一种十分常见的编程范式。而面向对象的设计模式可以进一步提高代码的可维护性和可扩展性。本文将重点介绍PHP中的简单工厂模式,以实现对象的无缝切换和替换。什么是简单工厂模式?简单工厂模式(Simple

PHP面向对象编程常见问题详解PHP面向对象编程常见问题详解Jun 09, 2023 am 09:27 AM

PHP语言因其易学易用而成为了一种非常流行的Web开发语言。面向对象编程是PHP语言中最重要的编程范式之一。但是,面向对象编程并不是容易掌握的东西,因此经常会出现一些常见的问题。在本篇文章中,我们将对PHP面向对象编程的常见问题进行详细解析。问题一:如何创建对象?在PHP中,可以使用new关键字来创建一个对象。例如:classMyClass{/

PHP如何实现面向对象编程,提高代码可读性和可维护性PHP如何实现面向对象编程,提高代码可读性和可维护性Jun 27, 2023 pm 12:28 PM

随着互联网技术的不断发展,PHP成为了我们常见的网站开发语言之一,PHP面向对象编程也成为了一个不得不学的知识点。面向对象编程(OOP)是一种编程范式,其核心概念是将数据与行为组合成一个对象,以提高代码的可重用性、可读性和可维护性。本文将探讨如何使用PHP实现面向对象编程并提高代码的可读性和可维护性。面向对象编程的基本概念在面向对象编程中,每个对象都有一组属

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版