オブジェクト指向 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を分ける
- 表示のindex.php
- クラス、プロパティ、メソッドのPHP
- インスタンスの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'に変わる。
//※このセッターはかみ砕くために自分で考えたので、間違ってたらすみません。
Author And Source
この問題について(オブジェクト指向 Progate:PHP講座2を終えて), 我々は、より多くの情報をここで見つけました https://qiita.com/takamin3106/items/1d1ee2d22cd69c0932c3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .