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

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

Apr 19, 2019 pm 01:33 PM
phpオブジェクト指向

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

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 是对象的指针而不是对象本身 obj2obj1都指向同一块内存同一个对象这一点和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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHP のオブジェクト指向カプセル化の詳細な説明 PHP のオブジェクト指向カプセル化の詳細な説明 Aug 11, 2023 am 11:00 AM

PHP オブジェクト指向カプセル化の詳細な解釈 カプセル化は、オブジェクト指向プログラミングの 3 つの主要な特徴の 1 つであり、データとデータに対する操作をクラスにカプセル化し、特定の実装の詳細を外部プログラムから隠し、外部インターフェイスを提供することを指します。 PHP では、カプセル化の概念は、アクセス修飾子 (public、protected、private) を使用してプロパティとメソッドのアクセス可能性を制御することによって実装されます。まず、アクセス修飾子の役割を見てみましょう。 public (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 オブジェクト指向のシンプルなファクトリ パターンを通じてオブジェクトのシームレスな切り替えと置換を実現する方法 Sep 06, 2023 am 08:01 AM

PHP のオブジェクト指向のシンプル ファクトリ モードを通じてオブジェクトのシームレスな切り替えと置換を実現する方法 はじめに: PHP 開発では、オブジェクト指向プログラミング (OOP と呼ばれるオブジェクト指向プログラミング) が非常に一般的なプログラミング パラダイムです。オブジェクト指向設計パターンにより、コードの保守性と拡張性がさらに向上します。この記事では、オブジェクトのシームレスな切り替えと置換を実現するための、PHP の単純なファクトリ パターンに焦点を当てます。シンプルファクトリーパターンとは何ですか?シンプルなファクトリーパターン(シンプル)

PHP のオブジェクト指向継承メカニズムを理解する PHP のオブジェクト指向継承メカニズムを理解する Aug 10, 2023 am 10:40 AM

PHP のオブジェクト指向継承メカニズムを理解する 継承はオブジェクト指向プログラミングにおける重要な概念であり、古いクラスの機能を含む新しいクラスの作成を可能にします。 PHP では、キーワード extends を使用して継承を実現できます。継承を通じて、サブクラスは親クラスのプロパティとメソッドを継承し、新しいプロパティとメソッドを追加したり、継承されたメソッドをオーバーライドしたりできます。例を通して、PHP のオブジェクト指向継承メカニズムを理解しましょう。 classAnimal{public$name

PHP 開発でオブジェクト指向プログラミングのスキルを習得する方法 PHP 開発でオブジェクト指向プログラミングのスキルを習得する方法 Jun 25, 2023 am 08:05 AM

インターネットの発展に伴い、PHP は徐々に Web 開発で最も人気のあるプログラミング言語の 1 つになりました。しかし、PHP の急速な発展に伴い、オブジェクト指向プログラミングは PHP 開発に必要なスキルの 1 つになりました。この記事では、PHP 開発におけるオブジェクト指向プログラミングのスキルを習得する方法について説明します。オブジェクト指向プログラミングの概念を理解する オブジェクト指向プログラミングは、オブジェクト (クラス、プロパティ、メソッド) を使用してコードとデータを編成するプログラミング パラダイムです。オブジェクト指向プログラミングでは、コードが再利用可能なモジュールに編成されるため、プログラムのパフォーマンスが向上します。

PHP がオブジェクト指向プログラミングを実装し、コードの可読性と保守性を向上させる方法 PHP がオブジェクト指向プログラミングを実装し、コードの可読性と保守性を向上させる方法 Jun 27, 2023 pm 12:28 PM

インターネット技術の継続的な発展に伴い、PHP は一般的な Web サイト開発言語の 1 つとなり、PHP オブジェクト指向プログラミングも学習する必要がある知識ポイントになりました。オブジェクト指向プログラミング (OOP) は、データと動作をオブジェクトに結合してコードの再利用性、可読性、保守性を向上させることを中心概念とするプログラミング パラダイムです。この記事では、PHP を使用してオブジェクト指向プログラミングを実装し、コードの可読性と保守性を向上させる方法を説明します。オブジェクト指向プログラミングの基本概念 オブジェクト指向プログラミングでは、各オブジェクトには一連のプロパティがあります。

PHP オブジェクト指向プログラミングにおける一般的な問題の詳細な説明 PHP オブジェクト指向プログラミングにおける一般的な問題の詳細な説明 Jun 09, 2023 am 09:27 AM

PHP 言語は、学習と使用が簡単であるため、非常に人気のある Web 開発言語となっています。オブジェクト指向プログラミングは、PHP 言語における最も重要なプログラミング パラダイムの 1 つです。ただし、オブジェクト指向プログラミングは簡単に習得できるものではないため、いくつかの一般的な問題が頻繁に発生します。この記事では、PHP のオブジェクト指向プログラミングに関する一般的な問題の詳細な分析を提供します。質問 1: オブジェクトを作成するにはどうすればよいですか? PHP では、new キーワードを使用してオブジェクトを作成できます。例: classMyClass{/

See all articles