【PHP】クラスのアクセス権・プロパティ・メソッドなど基本構文のまとめ($this, self::, parent::)

php-prograshi(プロぐらし)-kv PHP
記事内に広告が含まれていることがあります。

クラス

class [クラス名] {}
 └ クラス名は1文字目が大文字

“`php:例(クラス名 Product)
class Product{
//プロパティやメソッド
}

##アクセス権
**3種類**
▼アクセス権が厳しい順

1.**private**
・定義したクラス内でのみアクセス可。

2.**protected**
・継承クラス(子クラス)でもアクセス可

3.**public**
・クラスの外からアクセス可

<br>
privateやprotectedなど外からアクセスできなくすることをカプセル化という。

セキュリティ上、プロパティはカプセル化し、値の取得・変更にはメソッドを使う(ゲッターとセッター)。



<br>
##プロパティ
`[アクセス権] [$プロパティ名];`

php:
private $name;
protected $size;
public $color;

<br>
**▼プロパティの取得**

`[インスタンス名]->[プロパティ名]`
  └ プロパティ名に「$」は不要

php:

//メソッドを呼び出しているインスタンスのnameプロパティにアクセス
$this->name;

//インスタンスを格納した変数(例:appleWatch)のnameプロパティにアクセス
$appleWatch->name;

<br>
**▼プロパティの値変更**

`[インスタンス名]->[プロパティ名] = [変更後の値]`
  └ プロパティ名に「$」は不要

php:

//メソッドを呼び出しているインスタンスのnameプロパティにアクセスし値をiphoneに変更
$this->name = ‘iphone’

//インスタンスを格納した変数(例:appleWatch)のnameプロパティにアクセスし値をapple_watch_3に変更
$appleWatch->name = ‘apple_watch_3’

<br>
##メソッド
`[アクセス権] function [メソッド名](){}`
 └ メソッド名の後ろに「()」をつける
 └ メソッド名は大文字・小文字区別あり
 └ $は不要

php:
//hello worldを出力するhelloメソッド
public function hello(){
echo ‘hello world!’;
}

//消費税込みの価格を返すメソッド(引数に価格入れる)
public function taxIncludePrice($price){
return $price*1.01;
}

<br>
##ゲッターとセッター
特定の役割をするメソッドの名称

**▼ゲッター**
 └ カプセル化したプロパティの値を取得
 └ メソッド名の冒頭に「get」をつける
 └ 戻り値(return)にする

**▼セッター**
 └ カプセル化したプロパティの値を変更
 └ メソッド名の冒頭に「set」をつける
 └ 「=」でプロパティの値を変更する
 └ プロパティをコンストラクタでセットする場合は不要


いずれもクラスの外からアクセスするため、アクセス権はpublicとする。

php:

//ゲーターの例
public getName(){
return $this->name;
}

//セッターの例
public setName(){
$this->name = ‘変更する値’;
}

<br>
##クラスプロパティとクラスメソッド

- 個々のインスタンスではなく、クラスが持つデータにアクセスする場合に定義する。
- アクセス権の後に**「static」**
- アクセスは**「クラス名::」**
- 定義したクラス内で呼び出す場合は**「self::」**

<使用例>
・生成したインスタンスの数をカウントする。
・すべてのインスタンスの中から、指定した条件に一致するインスタンスを抽出する。


<br>
###クラスプロパティ
▼クラスプロパティの定義
`[アクセス権] static $[プロパティ名]`


▼クラスプロパティの取得
`[クラス名]::$[プロパティ名]`
 └ クラス内で設定する場合、クラス名は「self」になる
 └ 「$」必要。(普通のプロパティと異なる)
 └ アロー「->」が「::」に置き換わる

php:
//クラスプロパティの定義
protected static $count=0;

//クラスプロパティの取得
//クラス内
self::$count;

//クラス外(クラス名Productが持つプロパティにアクセス)
Product::$count;

<br>
###クラスメソッド
▼クラスメソッドの定義
`[アクセス権] static function [メソッド名](){}`


▼クラスメソッドの呼び出し
`[クラス名]::[メソッド名](){}`
 └ クラス内で設定する場合、クラス名は「self」になる
 └ 「$」必要。(普通のプロパティと異なる)
 └ アロー「->」が「::」に置き換わる

php:
//クラスメソッドの定義
protected static function getCount(){
//処理
};

//クラスメソッドの呼び出し
//クラス内
self::getCount();

//クラス外(クラス名Productが持つクラスメソッドの呼び出し)
Product::getCount();

<br>
##インスタンスの生成
`$変数名 = new クラス名()`
 └ new:インスタンスの生成
 └ 生成したインスタンスを変数に格納
 └ 変数は大文字、数値も使用可 

php:
$appleWatch7 = new Product();

<br>
##コンストラクタ
`public function __construct(){}`

・インスタンス生成時に自動で呼び出されるメソッド
・プロパティのセットで使用
・生成したインスタンスの数をカウントする場合に使用

php:
//インスタンス生成時にプロパティの値をセット
class Product{
//クラスプロパティ(生成したインスタンスのカウント用)
protected static $count = 0;

// プロパティ
protected $name;
protected $price;
protected $image;

// コンストラクタ
//プロパティの値セットはインスタンス生成時の引数で行う
public function __construct($name, $price, $img){
    $this->name = $name;
    $this->price = $price;
    $this->image = $img;

    // インスタンス生成毎に変数countに1を足す
    self::$count++;
} 
<br>
##主な特殊記号

###①$this
・メソッド内でのみ使える
・そのメソッドを呼び出しているインスタンス自体を示す


###②::
・クラスメソッドやクラスプロパティを呼び出す
・[クラス名]::[プロパティ名];
・[クラス名]::[メソッド名](){};


###③self::
・定義したクラスないでクラスプロパティやクラスメソッドを呼び出す場合に使用
・そのクラス自体を示す


###④parent::
・親クラスを示す
・子クラス(継承クラス)内で親クラスのメソッドを呼び出す
・親クラス内で定義されているコンストラクタの呼び出しなど

▼子クラスのコンストラクタで、親クラスのコンストラクタを呼び出す例

php:
public function __construct($name, $price, $img, $size){
//親クラスで定義したコンストラクタを呼び出し
parent::__construct($name, $price, $img);

//新たにプロパティを追加
$this->size =$size;
}
“`

⑤return

・名称:戻り値
・戻り値の値をメソッドと置き換える(戻り値を返す)
・returnが実行されると処理が終了する

タイトルとURLをコピーしました