Heim  >  Artikel  >  Backend-Entwicklung  >  Wie instanziiere ich Objekte in PHP objektorientiert (OOP)?

Wie instanziiere ich Objekte in PHP objektorientiert (OOP)?

藏色散人
藏色散人nach vorne
2019-04-19 13:33:363263Durchsuche

Die Einheit eines objektorientierten Programms ist ein Objekt, aber ein Objekt wird von einer Klasse instanziiert. Nachdem unsere Klasse nun deklariert wurde, besteht der nächste Schritt darin, das Objekt zu instanziieren. Im Folgenden stellen wir Ihnen vor, wie Sie Objekte instanziieren.

Wie instanziiere ich Objekte in PHP objektorientiert (OOP)?

Nachdem wir die Klasse definiert haben, verwenden wir das Schlüsselwort new, um ein Objekt zu generieren.

$object name = new class name();


<?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();

Dieser Code ist der Prozess der Generierung von Instanzobjekten durch Klassen. $p1 ist der Name des Objekts, das wir instanziieren. Ebenso sind $p2 und $p3 die Namen der Objekte, die wir instanziieren Es können mehrere Objekte generiert werden, und der obige Code entspricht dem Beispiel von 3 Personen. Es kann nur bedeuten, dass es sich bei allen um Menschen handelt Eigener Name, Geschlecht und Altersattribute, jeder hat eine Art zu sprechen und zu gehen. Solange die Mitgliedsattribute und Mitgliedsmethoden in der Klasse widergespiegelt werden, enthält das instanziierte Objekt diese Attribute und Methoden.

Objekte sind in PHP ebenso eine Datenklasse wie Ganzzahlen und Gleitkommatypen. Sie werden zum Speichern verschiedener Datentypen verwendet und müssen während des Betriebs in den Speicher geladen werden im Gedächtnis widergespiegelt?

Der Speicher ist logisch grob in 4 Segmente unterteilt:

Stapelraumsegment, Heapraumsegment, Codesegment, Initialisieren Sie die Statik Segmente ,

①. Das Stapelspeichersegment

zeichnet sich durch einen kleinen Speicherplatz, aber schnellen Zugriff durch die CPU aus. Es wird vorübergehend vom Benutzer erstellt, um die Programmvariable zu speichern. Aufgrund des Last-In-First-Out-Prinzips des Stapels eignet sich der Stapel besonders gut zum Speichern und Wiederherstellen von Anrufszenen. In diesem Sinne können wir uns den Stapel als einen Speicherbereich für die temporäre Datenspeicherung und den temporären Datenaustausch vorstellen. Speichersegmente werden zum Speichern von Datentypen verwendet, die eine konstante Länge und wenig Platz beanspruchen. Beispielsweise belegen Ganzzahlen 1, 100, 10000 usw. die gleiche Länge des Speicherplatzes und der belegte Speicherplatz beträgt 32 Bit und 4 Byte. Double, Boolean usw. können auch im Stapelspeichersegment gespeichert werden.

②. Heap-Speichersegment

Der Heap wird zum Speichern von Speichersegmenten verwendet, die während der Ausführung des Prozesses dynamisch zugewiesen werden. Seine Größe ist nicht festgelegt und kann dynamisch erweitert oder reduziert werden. Wird zum Speichern von Daten mit variabler Datenlänge oder großer Speichernutzung verwendet. In diesem Speicher werden beispielsweise Strings, Arrays und Objekte gespeichert.

③. Datensegment

Das Datensegment wird zum Speichern initialisierter globaler Variablen in der ausführbaren Datei verwendet. Mit anderen Worten: Es speichert vom Programm statisch zugewiesene Variablen.

④. Codesegment

Das Codesegment wird zum Speichern der Betriebsanweisungen der ausführbaren Datei verwendet, was bedeutet, dass es sich um das Abbild des ausführbaren Programms im Speicher handelt. Es muss verhindert werden, dass das Codesegment zur Laufzeit illegal geändert wird. Daher sind nur Lesevorgänge zulässig, Schreibvorgänge (Änderungsvorgänge) sind jedoch nicht zulässig. In diesem Speicher werden beispielsweise die Funktionen des Programms abgelegt.

Objekttypdaten sind ein Datentyp, der relativ viel Platz einnimmt, und es ist ein Datentyp, der eine variable Länge an Platz einnimmt. Daher wird das Objekt nach der Erstellung im Speicher gespeichert Der Verweis auf das Objekt wird weiterhin im Stapel gespeichert. Wenn das Programm ausgeführt wird, kann direkt auf die Daten im Speicher zugegriffen werden, während der Heap-Speicher ein Speicher ist, auf den nicht direkt zugegriffen werden kann. Auf die Mitglieder im Objekt kann jedoch über den Referenznamen des Objekts zugegriffen werden.

Unterschiedliche Deklarationen im Programm werden in unterschiedlichen Speichersegmenten platziert

Das Stapelspeichersegment belegt die gleiche Platzlänge und nimmt weniger Platz ein . Die Datentypen, wie z. B. Ganzzahlen 1, 10, 100, 1000, 10000, 100000 usw., belegen den gleichen Speicherplatz im Speicher und sind alle 64 Bit und 4 Byte groß.

Wo sollen also die Daten eines Datentyps mit variabler Länge und großem Speicherplatz in diesem Speichersegment abgelegt werden? Solche Daten werden im Heap-Speicher abgelegt.

Auf den Stapelspeicher kann direkt zugegriffen werden, während auf den Heapspeicher nicht direkt zugegriffen werden kann.

Bei unserem Objekt handelt es sich um einen großen Datentyp, der eine variable Länge an Speicherplatz einnimmt. Daher wird das Objekt im Heap abgelegt, der Objektname jedoch im Stapel. Damit das Objekt über den Objektnamen verwendet werden kann.

$p1=new Person();

Für diesen Code ist $p1 der Objektname im Stapelspeicher, new Person() ist das reale Objekt im Heapspeicher Einzelheiten finden Sie im Bild unten:

Wie instanziiere ich Objekte in PHP objektorientiert (OOP)?

从上图可以看出$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;

不一样的 

Das obige ist der detaillierte Inhalt vonWie instanziiere ich Objekte in PHP objektorientiert (OOP)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen