オブジェクト指向 Progate:PHP講座2を終えて


未来電子テクノロジーでインターンをしているtakaminです。
PHP難しすぎるんですけど頑張ってまとめてみます。

オブジェクト指向とは

オブジェクト指向とは、現実の「モノ」に対する考え方を取り入れた考え方のこと。
例えば、「ショッピング」であれば、現実でもプログラミングでも「カート」「商品」「客」からできていると考えられる。

クラス

クラスとはオブジェクトの設計図のこと。
つまり、オブジェクトの生みの親。
クラスの中には「プロパティ(データ)」と「メソッド(関数/動き)」をかく。

プロパティの書き方

public/private $プロパティに名前をつける

メソッドの書き方

public function hello(){
echo 'まぁ、関数にpublic/privateがつくだけ。
}

インスタンス

インスタンス=オブジェクト
クラスをもとに生み出されし実体。
インスタンスごとに異なるプロパティ、メソッドを持つ。

インスタンスからプロパティへのアクセス

インスタンス->プロパティ($を外す)

<?php
class Menu{           //クラス名は大文字であること。
  public $name;       //クラスのプロパティ。

}
$curry = new Menu();        //「new クラスと同じ名前」がインスタンス。
 $curry->name = 'CURRY';    //変数curryが$nameプロパティにアクセスし'CURRY'を代入した(定義)
 $curry->hello();           //メソッドhello()が実行される。
$pasta = new Menu();        //それを変数に入れておく。

?>

$thisについて

メソッド内では$thisが使える。
$thisはメソッドが呼び出された時、自動的に呼び出したインスタンスに置き換わる。

<?php
class Girl{
public $cute;
public function cute(){
  echo $this->cute.'はかわいいです';
 }
}
$Alice = new Girl();
  Alice->cute();            //Aliceはかわいいです。

コンストラクタ

メソッドの関数名を付けず、__construct()を付けておくと、インスタンス生成時に自動的にメソッドが動く。

<?php
class GOD{
public function__construct(){
  echo '今インスタンスを作ったな?お見通しだ'
 }
}

$secret = new GOD();    //'今インスタンスを作ったな?お見通しだ'が実行される。
?>

また、コンストラクタは引数をとることができる。
インスタンスの()に入れたものが対応する。?

<?php
class Menu{
public $name;
public function__construct($set){  //1. 引数$setが用意される。(関数の中のみの引数)
  echo $this->name = $set;         //2. インスタンスが$nameにアクセスし、$setを代入して表示
 }                                   
}                                                              // ↑よって'CURRY'と表示

$curry = new Menu('CURRY');        //3. 引数$setに代入されたのは'CURRY'だった。
?>

foreach文をHTMLと一緒に書く。

-通常の書き方-
<?php
$words = array('apple','banana','orange');
foreach($words as $word){
echo '<p>'$word,'</p>';
}
?>
-埋め込みの書き方-
<?php
$words = array('apple','banana','orange');?>
<?php foreach($words as $word): ?>                // :がある
<p><?php echo $word ?></p>
<?php endforeach ?>                       //endforeachでしめる。

phpファイルの読み込み

<?php require_once('new.php'); ?>

PHPを分ける

  1. 表示のindex.php
  2. クラス、プロパティ、メソッドのPHP
  3. インスタンスのPHP

カプセル化

publicは誰でも値にアクセスできる(変更される可能性)
privateだとアクセスできない。変えられたくない情報を保護する。
ただし、privateが効くのはクラスの外だけ。クラス内なら操作可能。

ゲッターgetterとセッターsetter

これが最大の謎。
privateにしたのに、クラスの外からいじれる仕組みを作ってしまっている。
意味ないじゃん。

<?php
class = Menu{
  private $name
  public function__construct($name){
    $this->name = $name;
  }
  public function getName(){          //ゲッター。クラス内だから$nameにアクセス可能
    return this->name;                //$nameの値を返すだけ
  }
  public function setName($changeName){    //セッター。クラス内だから$nameにアクセス可能
    $this->name = $changeName;
  }
}        //ここまでクラス内

$curry = new Menu('CURRY');
  echo $curry->name;          //privateの$nameにアクセスできなくて失敗
  echo $curry->getName();     //ゲッターを通して$nameにアクセスできる。結果:CURRY

  echo $curry->name = 'Indian Curry'          //失敗
  echo $curry->changeName('Indian Curry');    //商品名が'Indian Curry'に変わる。


//※このセッターはかみ砕くために自分で考えたので、間違ってたらすみません。