#クラス
オブジェクト指向では、クラスというオブジェクトの設計図を作成し、クラス(設計図)を元にオブジェクトを生成する。
#インスタンス
クラスを元に作成された実体を『インスタンス』と呼ぶ。インスタンスとオブジェクトは同じ意味で使われる。
インスタンスは『new』を用いて『new クラス名()』で生成できる。
『$変数名 = new クラス名()』のようにすることで生成したインスタンスを変数に代入している。
>```php
<?php
class Menu {
// クラスの内容
}
>
$menu1 = new Menu();
$menu2 = new Menu();
$menu3 = new Menu();
?>
#プロパティ
プロパティはインスタンスが持つデータのことで『public $プロパティ名』のように定義する。
>```php
<?php
class Menu {
public $name;
// nameプロパティを定義
}
?>
『インスタンス->プロパティ名』とすることでそのインスタンスのプロパティにアクセスすることができる(プロパティ名に$は不要)。
$curry = new Menu(); $curry->name = 'CURRY'; // プロパティに値をセット > echo $curry->name; // セットした値にアクセス ?>
結果
CURRY
#メソッド
メソッドはそれぞれのインスタンスが持つ関数のことである。
メソッドは『pablic function メソッド名()』のように定義する。また、『インスタンス->メソッド名()』のようにメソッドを呼び出すことができる。
>```php
<?php
class Menu {
// メソッドを定義
public function hello() {
echo 'これはMenuインスタンスです';
}
}
$curry = new Menu();
$curry->hello();
?>
結果
これはMenuインスタンスです
#$this
メソッド内でインスタンスのプロパティやメソッドにアクセスしたい時には『$this』という特殊な変数を用いる。
$thisはクラス内のメソッドの定義の中でのみ使用できる。
$thisはメソッドが呼ばれた時に、そのメソッドを呼び出しているインスタンスに置き換えられる。
name.'です'; // この場合$thisはメソッドを呼び出している$curryインスタンスに置き換えられる } } > $curry = new Menu(); $curry->name = 'CURRY'; $curry->hello(); ``` 結果 これはCURRYです #コンストラクタ __constructメソッドを定義すると、newを用いてインスタンスを生成するときに、このメソッドが自動的に呼び出される。 このようなインスタンス生成時に呼び出されるメソッドをコンストラクタという。 >```php class Menu { public function __construct() { // コンストラクタ内で行いたい処理 } } ``` ```php // コンストラクタが呼び出される $curry = new Menu(); ``` 結果 メニューが作成されました #コンストラクタと引数 newを用いてインスタンスを生成する際に引数を与えることができ、その値を__constructメソッドに渡せる。 >```php ```php class Menu { public $name; public function __construct($name) { $this->name = $name; } } > $curry = new Menu('CURRY'); echo $curry->name; ``` 結果 CURRY #HTMLにPHPを埋め込む HTMLのコードとPHPのコードを切り分けることができ、見やすくなる。 >```php // PHPのコード
// HTMLのコード
name ?>
```#セミコロンを省略できる条件
PHPのコードは、1行で書き表す場合は、区切る必要がないため、セミコロンを省略できる。
name ?>
```#foreach文をHTMLに埋め込む
foreach文の 『{』 の代わりに 『:』、 『}』 の代わりに 『endforeach』 と記述し、その間に処理を書いていく。
'.$word.''; } ?>通常のforeach文
```php:endforeachを用いたforeach文
<?php
$words = array('apple', 'banana', 'orange');
?>
<?php foreach ($words as $word): ?>
<p><?php echo $word ?></p>
<?php endforeach ?>
#endif endfor
if文、for文、while文やswitch文などもforeach文と同様に、それぞれ『endif』、『endfor』、『endwhile』、『endswitch』を使って書くことができる。
= 20): ?> ``` ```php:endforを用いたfor文 ```endifを用いたif文
#require_once
『require_once』を用いると別のphpファイルを読み込むことができる。
require_onceで読み込んだファイルで定義されているクラスや変数を、require_onceを記述したファイル内で使うことができる。
menu.php
```php:data.php
<?php
require_once('menu.php');
// menu.phpを読み込み
>
$curry = new Menu('CURRY')
// data.phpで定義した変数を使える
?>
<?php require_once('data.php') ?>
// data.phpを読み込み
<p>
<?php echo $curry->name ?>
// data.phpで定義した変数が使える
</p>
#画像を表示する
imageプロパティの値はタグのsrc属性に指定するため、ダブルクォーテーションの中に埋め込む。
echoしないとphpの処理の結果が出力されず、HTMLに反映されないので注意する。
```
#publicとprivate
カプセル化とは、クラスのプロパティとメソッドへのアクセスを制限することをいう。
クラスの外部からアクセスできるようにするには『public』を、アクセスできないようにするには『private』を用いて定義する。
プロパティは基本的にアクセス権をprivateにする。
public
class Menu {
// public
public $name;
public function __construct($name) {
$this->name = $name;
}
}
$curry = new Menu('CURRY');
echo $curry->name;
結果
CURRY
>```php:private
class Menu {
> // private
private $name;
>
public function __construct($name) {
$this->name = $name;
}
}
$curry = new Menu('CURRY');
echo $curry->name;
結果
エラー
#ゲッター
プロパティのアクセス権をprivateにするとプロパティの値をクラスの外から取り出すことができなくなる。そこで、
プロパティの値を返すだけのメソッドを定義する。このような、プロパティの値を返すだけのメソッドをゲッターという。
ゲッターは『getプロパティ名』のように命名するのが一般的である。
class Menu {
private $name;
public function __construct($name) {
$this->name = $name;
// クラス内なのでアクセスできる
}
// ゲッターの定義
public function getName() {
return $this->name;
// クラス内なのでアクセスできる
}
}
$curry = new Menu('CURRY');
echo $curry->getName();
#セッター
プロパティのアクセス権をprivateにするとプロパティの値をクラスの外から変更できなくなる。そこで、
プロパティの値を変更するメソッドを定義する。このような、プロパティの値を変更するメソッドをセッターという。
セッターは『setプロパティー名』のように命名するのが一般的である。
>```php
class Menu {
private $orderCount;
// ・・・
>
// セッターの定義
public function setOrderCount($orderCount) {
$this->orderCount = $orderCount;
}
}
$juice = new Menu('JUICE',・・・);
>
// セッターを用いて値をセット
$juice->setOrderCount(2);
>
echo $juice->getOrderCount();
// 結果 : 2
>
$juice->orderCount = 4;
// privateなので直接アクセスできない
#プロパティの初期値
プロパティを定義する際に初期値をセットすることができる。
class Menu {
// 初期値をセット
private $orderCount = 0;
public function getOrderCount() {
return $this->orderCount;
}
}
```php
$curry = new Menu('CURRY');
echo $curry->getOrderCount();
結果
0