#クラスとインスタンスについて
##クラスとインスタンスとは
PHPには原本となる型を再利用して効率化を測る機能があります。それがクラスとインスタンスです。
クラスが原本となる型。
インスタンスが型を元にして作成されたものです。
型の中身には、メソッドとプロパティという要素が存在しています。
メソッドが機能(関数や制御構造など)
プロバティがデータ(名前や性別といった属性)になります。
以前まとめたものがこちらになりますので参照ください。
##クラス定義
###覚えること
クラス定義方法
インスタンス作り方
値のアクセス方法
値の入れ方
メソッドの実行方法
コンストラクタ
クラス定義ファイルの読み込み
スタティックプロパティとスタティックメソッド
まずはこいつら
・クラス定義方法
・インスタンス作り方
・値のアクセス方法
・値の入れ方
・メソッドの実行方法
<?php
class staff {
//インスタンスのプロパティ
public $name;
public $age;
//インスタンスのメソッド
public fanction hello(){
echo "こんにちは","\n";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>クラスを定義する</title>
</head>
<body>
<pre>
<?php
//Staffのインスタンスを作る
$hana = new Staff();
$taro = new Staff();
//プロパティの値を設定する
$hana->name = "花";
$hana->age = "21";
$taro->name = "太郎";
$taro->age = "35";
//インスタンスを確認する
print_r($hana);
print_r($taro);
//メソッドを実行する
$hana->hello();
$taro->hello();
?>
</pre>
</body>
</html>
//print_r($hana);
//print_r($taro);
Staff Object
(
[name] => 花
[age] => 21
)
Staff Object
(
[name] => 太郎
[age] => 35
)
//$hana->hello();
//$taro->hello();
こんにちは!
こんにちは!
class クラス名{
//クラス名の文頭は基本的に大文字
public const 定数名 = 値;
//設定した値は変更できない
public $変数名
//プロパティ
public function メソッド名(){
}
}
$変数名 = new クラス名();
//()は省略できる
$インスタンス->プロパティ名
$インスタンス->プロパティ名 = 値
$インスタンス->メソッド名(引数)
####クラスのメソッドにクラス自身のプロパティを利用する時(例文にはのってない)
public function hello(){
echo "こんにちは、"{$this->name}です!","\n";
}
//$this -> プロパティ名をつけることでアクセスが可能
つぎはこいつら
・コンストラクタ
・クラス定義ファイルの読み込み
・スタティックプロパティとスタティックメソッド
<?php
//Staffクラスファイルを読み込む
require_once("Staff.php")
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Staff クラスメンバーを使う</title>
</head>
<body>
<pre>
<?php
//クラスメソッドを実行
Staff::deposit(100);
Staff::deposit(150);
//クラスプロパティを確認する
echo Staff::$piggBank, "円になりました。"\n";
//インスタンスを作る
$hana = new Staff("花",21);
//インスタンスメソッドを実行する
$hana->latePenalty();
//クラスプロパティを確認する
echo Staff::$piggyBank, "円になりました。"\n";
?>
</pre>
</body>
</html>
250円になりました。
1250円になりました。
function__construct(引数1、引数2…){
//処理
}
コンストラクタは、インスタンスを作成した時に自動で発動するメソッド。
require_once()
//()にはひっぱり元のファイルが置いてあるパスを記入。(同じフォルダ内にある場合はファイル名でも良い)
クラス定義をする場合はクラス定義をしたファイルを作り、利用するファイル上で読み込ませるのが主流。
読み込ませるための指示がrequire_once()
class クラス名{
//スタティックプロパティ
public static const定数名 = 値;
public static $変数名;
//スタティックメソッド
public static function メソッド名(){
}
}
クラス自身にプロパティやメソッドを付与することも可能。
生成するインスタンスが共通項として持つ物に関しては、こちらを利用する。
##クラスの継承
新たにクラスを作成する際、既存のクラスを再利用して作成ができる。
###覚えること
・継承の仕方
・継承したメソッド、プロパティ、コンストラクタの利用方法
・継承したクラスの情報の上書き方法(オーバーライド)
####継承の仕方
claas 子クラス extends 親クラス{
}
//新たに生成するクラス名が「子クラス」継承先のことを「親クラス」と呼ぶ
####継承したメソッド、プロパティ、コンストラクタの利用方法
子クラス名 -> 継承されたメソッド名()
//継承したメソッドの利用方法
子クラス名 -> プロパティ名
//継承したプロパティの利用方法
parent::__construct(引数);
処理
}
//継承したコンストラクトの利用方法
メソッドとプロパティは通常通り記述すれば問題なし。(継承はメソッドとプロパティのコードがコピーされていると認識すれば良い)
コンストラクトの場合のみ、parent::をつける。(継承したコンストラクトを使うのか子クラスにコンストラクトを付与したのかわかるようにするため)
####継承したクラスの情報の上書き方法(オーバーライド)
継承したプロパティやメソッドのデータを上書きすることができる。上書きする場合は、子クラスへ親クラスに存在するメソッドやプロパティと同じ名前でメソッドやプロパティを付与する。
##トレイト
よくわかりません。
誰か教えてください。