検索
ホームページバックエンド開発PHPチュートリアルPHP オブジェクト指向 (OOP) でオブジェクトをインスタンス化するにはどうすればよいですか?

オブジェクト指向プログラムの単位はオブジェクトですが、オブジェクトはクラスによってインスタンス化されます。クラスが宣言されたので、次のステップはオブジェクトをインスタンス化することです。ここではオブジェクトをインスタンス化する方法を紹介します。

PHP オブジェクト指向 (OOP) でオブジェクトをインスタンス化するにはどうすればよいですか?

クラスを定義した後、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=新しい人();

#このコードは、クラスを通じてインスタンス オブジェクトを生成するプロセスです。$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() はヒープ メモリ内の実際のオブジェクトです。内部の詳細については、下の写真をご覧ください:

从上图可以看出$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 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はcnblogsで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
PHPの継続的な使用:その持久力の理由PHPの継続的な使用:その持久力の理由Apr 19, 2025 am 12:23 AM

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

PHPおよびPython:類似点と相違点を調査しますPHPおよびPython:類似点と相違点を調査しますApr 19, 2025 am 12:21 AM

PHPとPythonはどちらも、Web開発、データ処理、自動化タスクで広く使用されている高レベルのプログラミング言語です。 1.PHPは、ダイナミックウェブサイトとコンテンツ管理システムの構築によく使用されますが、PythonはWebフレームワークとデータサイエンスの構築に使用されることがよくあります。 2.PHPはエコーを使用してコンテンツを出力し、Pythonは印刷を使用します。 3.両方ともオブジェクト指向プログラミングをサポートしますが、構文とキーワードは異なります。 4。PHPは弱いタイプの変換をサポートしますが、Pythonはより厳しくなります。 5. PHPパフォーマンスの最適化には、Opcacheおよび非同期プログラミングの使用が含まれますが、PythonはCprofileおよび非同期プログラミングを使用します。

PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境