未分類

超初心者のためのPHP勉強講座【第6回:オブジェクト操作】

この記事はこんな人にオススメです
  • PHPが気になっている人
  • PHPを勉強し始めたばかりの人
  • PHP初級技術者認定試験を受験しようと思っている人

こんにちは、Webエンジニアを目指してPHPを勉強しているToyです。

本日はPHP技術者認定初級試験に向けた勉強を行っていきたいと思います。

前回は『関数』について勉強しました。まだ見てない人はこちらをご覧ください。

超初心者のためのPHP勉強講座【第6回:オブジェクト操作】 こんにちは、Webエンジニアを目指してPHPを勉強しているToyです。 本日はPHP技術者認定初級試験に向けた勉強を行って...

本日のテーマは『オブジェクトの操作』についてです。

オブジェクトと基本用語

オブジェクト
ある対象に関するデータ(変数)とその対象に対する動作(データを操作する関数)を関連づける構造のこと

クラス
オブジェクトの変数と関数を記述したひな形のようなもの
このクラスと呼ばれるひな形からオブジェクトが作成される

メソッド
クラスで定義されている関数のこと

プロパティ
クラスで定義されている変数のこと

インスタンス
クラスを利用して生成された1つ1つのオブジェクトのこと
クラスからインスタンスを作成することを(オブジェクトの)インスタンス化という

オブジェクトの作成

クラスの定義

オブジェクトはクラスと呼ばれるひな形から作られるといいましたが、このクラス定義するにはclassキーワードを利用して以下のように記述します。※定義するクラスはvehicleクラスとします。

class Vehicle{
// ここにオブジェクトで利用するデータ(プロパティ)やデータの操作(メソッド)を記述する.
}

toy
toy
クラスの中でメソッドを定義する時は、関数と同様にfunctionキーワードを使うんだって!

インスタンスの作成

クラスからインスタンスを作成する場合はnewキーワードを使用します。

作成したインスタンスの管理は変数行います。インスタンスを変数に代入すると、その変数を利用してインスタンスのプロパティやメソッドを利用することができます。

以下に、インスタンスを作成し、vhcという名前の変数で管理する場合のコードを記述します。

$vhc = new Vehicle();

インスタンスを変数に代入する場合、代入される変数の型は「オブジェクト型」となります。また、インスタンスのプロパティやメソッドを利用する時は、「->」演算子を用いて「$vhc->$プロパティ名」や「$->メソッド名()」のように記述します。

静的メソッド

一般に、クラス内のプロパティやメソッドはインスタンス化を行ってからじゃないと利用できません。しかし、中にはインスタンス化をしなくても利用できるメソッドがあります。それは「静的メソッド」と呼ばれるメソッドで、特定のインスタンスのプロパティ値に依存しないという性質があります。

静的メソッドを利用する時は、「クラス名::静的メソッド名()」と記述し、「->」演算子は使用しません。

静的メソッドは、「データベース接続」などで多く利用されます。

コンストラクタ

コンストラクタとは「__construct」という名前で定義される特殊なメソッドです。
オブジェクトのインスタンス化時に自動で実行されるため、インスタンスのプロパティ初期化などでよく利用されます。

例外処理

例外とは、プログラム実行時に想定外の事態が発生したことを通知するためのオブジェクトです。例外のクラスはExceptionクラスで表し、例外を発生させる場合は次のように記述します。

throw new Exception("文字列");

Exceptionクラスにもコンストラクタが用意されており、上記コード内の「”文字列”」は$messageプロパティに代入されます。

発生した例外はプログラムが停止する前に捕捉し、処理する必要があります。
例外の処理手順は、以下の通りです。

まず、tryブロック内に例外を発行しそうなコードを記述します。
次に、tryブロックの後ろにcatchブロックを用意し、例外を捕捉したときの処理を記述します。

例外の適切な処理が記述されていない場合、未捕捉と呼ばれ、プログラムの実行が終了します。

オブジェクトの拡張

PHPではサブクラスという概念が存在し、これを用いることでオブジェクトを拡張することができます。サブクラス(子クラス)は、既存のクラス(親クラス)の機能を継承したり、独自の機能を追加したりすることができます。サブクラスを作成する際はextendsキーワードを使用して、次のように記述します。

class Car extends Vehicle { }

また、クラス内のプロパティやメソッドにはアクセス権を指定することができます。アクセス権の種類とその役割を以下の表に記述します。

アクセス権の種類 アクセス範囲
public クラス内外問わずアクセス可能
private 定義したクラス内でのみアクセス可能
protected 定義したクラス、またはそのクラスを継承したクラス、そのクラスの親クラスからアクセス可能

プロパティやメソッドを定義する場合はアクセス権を設定する必要があり、アクセス権を設定しないと文法エラーとなります。

サブクラスのコンストラクタ

サブクラスは親クラスの機能を継承しますが、サブクラスからインスタンスを作成する時に親クラスのコンストラクタは自動実行されません。親クラスのコンストラクタを呼び出したい場合は、以下のように記述する必要があります。

class Car extends Vehicle {
public function __construct(){
//サブクラスのコンストラクタないで親クラスのコンストラクタを呼び出す
parent::construct();
}
}

名前空間

PHP5.4以降のPHPエンジンでは、名前空間と呼ばれるものを利用してコードを整理することができるようになりました。名前空間を利用すると関連するコードをパッケージ化したり、他人が書いたプログラム内に同じ名前のクラスがあった場合にクラスが衝突するのを防いだりすることができます。

名前空間を利用する場合は、namespaseキーワードの後ろに名前空間名を記述します。

namespace 名前空間名;

名前空間で定義されたクラスを呼び出す場合は、「名前空間名\クラス」というように記述します。

さらに、名前空間は他の名前空間を持つこともでき、そのような場合に簡単にクラスを呼び出すために、別名をつけることができます。

例えば、「\Title\Season1\Episode3」に「Climax」という別名をつけたい時は

use \Title\Season1\Episode3 as Climax;

と記述します。

終わりに

今回は「オブジェクト操作」について勉強しました。

toy
toy
オブジェクトは構造であり実体でありって、少し難しかったな〜

長い間勉強がストップしてしまっていましたが、ちょくちょく進めていきたいと思います!

次回のテーマは、「Webフォーム作成」です。お楽しみに〜

# To be continued

この記事はこれらの本を参考にしています。

ABOUT ME
Toy
Toy
大学院に通ってましたが新しい夢に向かって1年休学中です。 夢は就職せずにフリーランスとして生きていくこと! 好き:Elic、料理、折り紙、プログラミング(C、python、etc.)、webサイト制作。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です