ホームページ > バックエンド開発 > PHPチュートリアル > クラスとオブジェクトを備えたオブジェクト指向PHP

クラスとオブジェクトを備えたオブジェクト指向PHP

Joseph Gordon-Levitt
リリース: 2025-02-28 10:47:18
オリジナル
621 人が閲覧しました

この記事では、PHPクラスを使用してオブジェクト指向プログラミングの基本を探ります。

クラスとオブジェクトの紹介から始めます。この記事の後半の継承と多型などのいくつかの高度な概念について説明します。 OOPと呼ばれるアプローチは、長期にわたって簡単に保守可能でスケーラブルな方法で複雑なアプリケーションを開発するのに役立つアプローチです。 OOPの世界(PHPでオブジェクトを作成するため)では、

、またはなどの現実世界のエンティティがオブジェクトとして扱われます。オブジェクト指向プログラミングでは、オブジェクトを使用してアプリケーションと対話します。これは、主に関数やグローバル変数と相互作用する手続き的プログラミングとは対照的です。

oopには、実際のエンティティをモデル化またはマッピングするために使用される「

classPerson」の概念があります。 「CarオブジェクトAnimal」はクラスのインスタンスであり、同じクラスの複数のインスタンスを作成できます。たとえば、単一の

クラスがありますが、多くの人物は、このクラスのインスタンス(

など)になる可能性があります。たとえば、人のクラスの場合、、およびがある場合があります。その後、各オブジェクトはそれらのプロパティに対して独自の値を持ちます。 オブジェクトプロパティの値を操作し、オブジェクトの操作を実行できるように、クラス内のメソッドを定義することもできます。例として、オブジェクト情報をデータベースに保存するAメソッドを定義できます。クラスは、実際のエンティティを表すテンプレートであり、エンティティのプロパティと方法を定義します。このセクションでは、典型的なPHPクラスの基本的な解剖学について説明します。Persondan新しい概念を理解する最良の方法は、例を挙げています。それでは、従業員エンティティを表す次のスニペットのzainabクラスを見てみましょう。hector

最初の行のnameステートメントはageクラスを定義します。次に、PHPのプロパティ、コンストラクター、およびその他のクラスメソッドを宣言します。PHPのクラスプロパティphoneNumber

クラスプロパティを、オブジェクトに関する情報を保持するために使用される変数と考えることができます。上記の例では、3つのプロパティを定義していますsave -

、および

。ほとんどの場合、クラスプロパティはインスタンス化されたオブジェクトを介してアクセスされます。

これらのプロパティはprivateです。つまり、PHPのクラス内からのみアクセスできることを意味します。これは、プロパティにとって最も安全なアクセスレベルです。この記事の後半で、PHPのクラスプロパティとメソッドのさまざまなアクセスレベルについて説明します。

PHPクラスのコンストラクター

コンストラクターは、オブジェクトをインスタンス化するときに自動的に呼ばれる特別なクラスメソッドです。次の2つのセクションでオブジェクトをインスタンス化する方法を確認しますが、今のところ、オブジェクトが作成されているときにコンストラクターを使用してオブジェクトプロパティを初期化するために使用されることを知る必要があります。ほとんどの場合、それらはオブジェクトのプロパティにアクセスして操作し、関連操作を実行するために使用されます。

上記の例では、オブジェクトに関連付けられている姓を返す__constructメソッドを定義しました。 

それは、PHPのクラス構造の簡単な紹介です。次のセクションでは、

クラスのオブジェクトをインスタンス化する方法を確認します。これで、クラスを使用する場合は、インスタンス化する必要があり、最終結果はオブジェクトです。したがって、クラスを青写真と考えることができます。オブジェクトは、前のセクションで作成したばかりのクラスのコンテキストで、そのクラスのオブジェクトをインスタンス化する方法を見てみましょう。そのクラスのインスタンス。

クラスが

メソッドを定義し、引数が必要な場合は、オブジェクトをインスタンス化するときにそれらの引数を渡す必要があります。私たちの場合、getLastNameクラスコンストラクターには3つの引数が必要であるため、

オブジェクトを作成したときにこれらを渡しました。前述のように、オブジェクトがインスタンス化されたときに

メソッドは自動的に呼び出されます。Employee

次に、オブジェクトの作成中に初期化された情報を印刷するために

オブジェクトのクラスメソッドを呼び出しました。もちろん、次のスニペットに示されているように、同じクラスの複数のオブジェクトを作成できます。

次の画像は、従業員クラスとそのインスタンスのグラフィカルな表現です。

capsulation

前のセクションでは、Employeeクラスのオブジェクトをインスタンス化する方法について説明しました。 $objEmployeeオブジェクト自体がクラスのプロパティと方法をまとめることに注意するのは興味深いことです。言い換えれば、プログラムの残りの部分からこれらの詳細を隠しています。 OOPの世界では、これはデータのカプセル化と呼ばれます。

カプセル化は、OPの重要な側面であり、オブジェクトの特定のプロパティまたはメソッドへのアクセスを制限できます。そして、それはディスカッションのための別のトピックに私たちをもたらしますアクセスレベル。

アクセスレベル

クラス内のプロパティまたはメソッドを定義すると、これらの3つのアクセスレベルのいずれかを宣言できますpublicprivateprotected

上記の例でわかるように、

繰り返しますが、プライベートアクセスレベルを理解するために前の例を修正しましょう。したがって、

メソッドを使用したように、セッターメソッドを使用して私有地の値を設定する必要があります。たとえば、おそらく、そのプロパティが変更された場合は、ある程度のアクションを実行する必要があります(データベースの更新、テンプレートの更新、またはテンプレートの再レンダリング)。その場合、セッターメソッドを定義し、プロパティが変更されたときに特別なロジックを処理できます。
<?php<br>class Employee<br>{<br>  private $first_name;<br>  private $last_name;<br>  private $age;<br> <br>  public function __construct($first_name, $last_name, $age)<br>  {<br>    $this->first_name = $first_name;<br>    $this->last_name = $last_name;<br>    $this->age = $age;<br>  }<br><br>  public function getFirstName()<br>  {<br>    return $this->first_name;<br>  }<br><br>  public function getLastName()<br>  {<br>    return $this->last_name;<br>  }<br><br>  public function getAge()<br>  {<br>    return $this->age;<br>  }<br>}<br>?><br>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

保護されたアクセスname

最後に、プロパティまたはメソッドを

として宣言すると、それを定義した同じクラスと問題のあるクラスを継承するクラスでアクセスできます。次のセクションで継承について説明しますので、少し後で保護されたアクセスレベルに戻ります。

継承

継承は、オブジェクト指向プログラミングパラダイムの重要な側面であり、拡張して他のクラスのプロパティと方法を継承できるようにします。継承されているクラスは親クラスと呼ばれ、他のクラスを継承するクラスは子クラスと呼ばれます。子クラスのオブジェクトをインスタンス化すると、親クラスのプロパティとメソッドも継承します。

継承の概念を理解するために次のスクリーンショットを見てみましょう。現実世界の例を越えて、それがどのように機能するかを理解するために。

クラスとオブジェクトを備えたオブジェクト指向PHP

ここで注意すべき重要なことは、PersonクラスがEmployeeキーワードを使用して

クラスを継承したことです。これで、

クラスは、公共または保護されていると宣言されている

クラスのすべてのプロパティとメソッドにアクセスできます。 (プライベートとして宣言されているメンバーにアクセスできません。)
<?php<br>class Employee<br>{<br>  private $first_name;<br>  private $last_name;<br>  private $age;<br> <br>  public function __construct($first_name, $last_name, $age)<br>  {<br>    $this->first_name = $first_name;<br>    $this->last_name = $last_name;<br>    $this->age = $age;<br>  }<br><br>  public function getFirstName()<br>  {<br>    return $this->first_name;<br>  }<br><br>  public function getLastName()<br>  {<br>    return $this->last_name;<br>  }<br><br>  public function getAge()<br>  {<br>    return $this->age;<br>  }<br>}<br>?><br>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上記の例では、EmployeeオブジェクトはextendsクラスとPersonクラスで定義されているEmployeePersonメソッドにアクセスできます。最後に、

オブジェクトは、プライベートと宣言されているため、

クラスの$employeeメソッドにアクセスできません。一方、getNamesetNameオブジェクトを使用して、Personクラスの

プロパティを設定します。継承の紹介。コードの複製を減らすのに役立ち、したがってコードの再利用性を促進します。

callToProtectedNameAndAge多型getNameAndAgeEmployee$employee多型は、データタイプに基づいてオブジェクトを処理する能力を指すオブジェクト指向プログラミングの世界におけるもう1つの重要な概念です。 方法。これはメソッドオーバーライドと呼ばれます。現実世界の例をすぐに進めて、オーバーライドの方法の概念を理解しましょう。

<?php<br>class Employee<br>{<br>  private $first_name;<br>  private $last_name;<br>  private $age;<br> <br>  public function __construct($first_name, $last_name, $age)<br>  {<br>    $this->first_name = $first_name;<br>    $this->last_name = $last_name;<br>    $this->age = $age;<br>  }<br><br>  public function getFirstName()<br>  {<br>    return $this->first_name;<br>  }<br><br>  public function getLastName()<br>  {<br>    return $this->last_name;<br>  }<br><br>  public function getAge()<br>  {<br>    return $this->age;<br>  }<br>}<br>?><br>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ご覧のとおり、formatMessageクラスでオーバーライドすることにより、BoldMessageメソッドの動作を変更しました。重要なことは、親クラスのインスタンスであろうと子クラスのインスタンスであろうと、オブジェクトタイプに基づいてメッセージが異なる形式でフォーマットされることです。これはPHPでは直接サポートされていませんが、同様の機能を達成するためのいくつかの回避策があります。

結論

PHPクラスを使用したオブジェクト指向プログラミングの基本を知っています。オブジェクト指向のプログラミングは膨大なテーマであり、その複雑さの表面を引っ掻いただけです。このチュートリアルは、OOPの基本を始めて、さらに高度なOOPトピックを学ぶように動機付けられることを願っています。今日、PHPのコンテキストで、OOPのいくつかの基本的な概念について説明しました。また、いくつかの実際の例を紹介する機会もありました。

以上がクラスとオブジェクトを備えたオブジェクト指向PHPの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート