PHPの配列、クラス、インターフェースについて理解する。
PHPの配列とクラス、インターフェースの主な使い方についてまとめました。
配列
追加
$array = [1,2,3];
$array[] = 4; // 配列の最後に追加 出力:[1,2,3,4]
array_push($array,5,6); // 複数追加の場合はarray_push 出力:[1,2,3,4,5,6]
array_unshift($array,0); // 配列の先頭に追加 出力:[0,1,2,3,4,5,6]
// 連想配列
$array_2 = ['red' => 'apple' , 'yellow' => 'banana'];
$array_2['pink'] = 'momo'; // 出力;['red' => 'apple' , 'yellow' => 'banana' , 'pink' => 'momo'];
挿入
$array = [1,2,4];
array_splice($array,2,0,3); // 出力:[1,2,3,4]
array_splice
は(対象の配列,挿入するインデックス番号,削除する数,挿入する値)
になってます。
なので追加だけの場合は第三引数は0にします。
削除
$array = [1,2,3,4,5,6];
array_pop($array); // 末尾の要素を削除 出力[1,2,3,4,5]
array_shift($array); // 先頭の要素を削除 出力[2,3,4,5]
array_splice($array,2,2) // 特定の位置からの削除 出力[2,3]
// 連想配列
$array_2 = ['red' => 'apple' , 'yellow' => 'banana'];
unset($array_2['red']); // 出力;['yellow' => 'banana']
連装配列の削除はunset(配列[キー])
で行う。
結合
$arr_1 = [1,2,3];
$arr_2 = [4,5,3];
$mergedArray_1 = array_merge($arr_1,$arr_2); // 出力: [1,2,3,4,5,3]
// 連想配列
$arr_3 = ['red' => 'apple' , 'yellow' => 'banana'];
$arr_4 = ['red' => 'cheery' , 'green' => 'watermelon'];
$mergedArray_2 = array_merge($arr_3,$arr_4); // 出力: ['red' => 'cheery' , 'yellow' => 'banana' , 'green' => 'watermelon']
array_merge()
は引数の配列を全て結合して新しい配列として返す。
配列の場合、重複してる要素があってもそのまま結合して返す。
連装配列の場合、重複しているキーは上書きされて返されるので注意が必要。
mapメソッド
$array = [1,2,3,4,5];
$squaredArray = array_map(function($value){
return $value ** 2;
},$array); // 出力:[1,4,9,16,25]
// 連想配列
$array_2 = [['id' => 1 , 'price' => 300],['id' => 2 , 'price' => 200],['id' => 3 , 'price' => 500]];
$taxedArray = array_map(function($elem){
$elem['price'] *= 1.1; // 税込み価格のリストにして返す関数
return $elem;
},$array_2); // 出力:[['id' => 1 , 'price' => 330],['id' => 2 , 'price' => 220],['id' => 3 , 'price' => 550]]
array_map()
は第一引数に配列内の要素に対し、処理を行う関数。第二引数以降で対象となる配列を渡す。
クラス
作成、継承、インスタンス
class Human {} // クラスの作成
class Student extends Human {} // 親クラスを継承
$student = new Student(); // インスタンスの作成
メソッド、プロパティの定義
class Human
{
private $gender = '女性'; // クラス内で変数(プロパティ)を宣言
protected function man() // メソッドを定義
{
echo '男性';
}
public function female()
{
echo $this->gender;
}
}
$human = new Human();
$human->gender; // privateのため、エラー
$human->man(); // protectedのため、エラー
$human->female(); // publicなので問題なし。 出力:女性
private
はそのクラスの中で利用可能な修飾子。最も強力。オーバーライドもできない。
protected
はそのクラスと継承してるすべてのクラス内部で利用可能。
public
はクラス外部のすべてで利用可能。最も緩い。
コンストラクタの宣言
class Human
{
public $family = 'ヒト科';
public $gender;
public function __construct($gender)
{
$this->gender = $gender;
}
}
$human = new Human('男性');
public function __construct
でコンストラクタを宣言することができる。
コンストラクタはインスタンスを作成した時に、呼び起される関数。
子クラスでのコンストラクタ継承
class Student extends Human
{
public $grade;
public function __construct($gender, $grade)
{
parent::__construct($gender);
$this->grade = $grade;
}
}
$student = new Student('男性','1年生');
parent::__construct()
で親クラスのコンストラクタを呼び出せる。
定数の宣言
class Human
{
public const FAMILY = 'ヒト科'; // 定数の宣言
public function belong()
{
echo self::FAMILY; // 定数の呼び出し
}
}
echo Human::FAMILY // クラス外からの呼び出し。
const
で定数を宣言できる。定数を呼び出す場合はself::定数名
で呼び出す。
クラス外から呼び出すときはクラス名::定数名
で呼び出す。
staticプロパティ
class Human
{
public static $man = '男';
public static function belong()
{
echo '人間';
}
}
Human::belong(); // インスタンス無しに呼び出せる。
Human::$man;
static
はインスタンスを作成せずとも、::
演算子を使って呼び出すことができる。
インターフェース
インターフェース
とはクラスのメソッドについての設計書を表したようなもの。
これを引き継ぐことで、そのクラスについての機能に保証を持たせる事ができる。
インターフェースに必要なもの
- メソッドについての名前や引数の型、戻り値の型などを記載する
- メソッドの具体的な処理については記載しない。
- 宣言されるメソッドは全てpublicである
以下はプログラミング言語のインターフェースを使用した例
// インターフェースの設定
interface ProgrammingLang{
public function language(float $version): void;
}
// インターフェースの使用
class Python implements ProgrammingLang {
// インターフェースの仕様を満たしている必要がある。
public function language(float $version): void {
echo "Python バージョン:{$version}";
}
}
class PHP implements ProgrammingLang {
public function language(float $version): void {
echo "PHP バージョン:{$version}";
}
// インターフェースに定義されていない独自メソッドを使用することもできる。
public function framework(): void {
echo 'laravel';
}
}
class Javascript implements ProgrammingLang {
// これはインターフェースの仕様を満たしていないのでエラーになる。
public function framework(): void {
echo 'React';
}
}
function output (ProgrammingLang $target , float $version) {
$target->language($version);
}
// 呼び出す
output(new Python() , 3.12);
output(new PHP() , 8.4);
interface
でインタフェースを定義する事ができる。
implements
でインターフェースを使用する事ができる。
終わり
以上です。
Discussion