【PHP】HTMLに埋め込む、ファイルを分ける、カプセル化する(ゲッター・セッター)
HTMLに埋め込む書き方
<?php
$menus = array($juice,$coffee,$curry,$pasta);
?>
<div class="menu-items">
<?php foreach ($menus as $menu):?>
<h3><?php echo $menu->name ?></h3>
<?php endforeach ?>
</div>
foreach($menus as $menu){
echo $menu->name ;
}
とする代わりに、{を:に、}をendforeachに書き換えている。
※endfor, endif, endwhile でも同様に書き換える。
ファイルを分ける
require_onceを用いると、別のphpファイルを読み込むことができる
require_onceで読み込んだファイル内で定義されているクラスや変数を、require_onceを記述したファイル内で使うことができる。
HTMLにメソッドを埋め込む
<?php
class Menu{
public $price;
public function getTaxIncludedPrice(){
return floor($this->price*1.1);
//priceかける1.1をして、小数点以下を切り捨てるfloor関数
}
}
?>
<p class="price">¥<?php echo$menu->getTaxIncludedPrice() ?>(税込)</p>
//メソッド名()のあとの;は省略
クラスを作る際には、public/privateを分けて作成する。
・他の人がそのクラスを使いやすいよう、公開する機能
→publicで定義 (例:値段を取得する機能)
・クラスの外では使って欲しくないので、隠す機能
→privateで定義 (例:値段を直接変更する機能)
※基本的にプロパティはprivateにする。
privateにするとプロパティの値をクラスの外から取り出すことができなくなる。
そこで、プロパティの値を返すだけのメソッドを定義する。
このようなメソッドを「ゲッター」といい、「getプロパティ名」のように命名する。
<?php
class Menu{
private $image;
public function getImage(){
return $this->image;
}
}
<img src="<?php echo $menu->getImage() ?>">
//imgタグに埋め込む場合、""で囲むことにも注意
セッター
プロパティのアクセス権をprivateにすると、プロパティの値をクラスの外から変更できなくなる。
そこで、プロパティの値を変更するメソッドを定義する。
このようなメソッドを「セッター」といい、「setプロパティ名」のように命名する。
<?php
class Menu {
private $orderCount = 0; //プロパティの初期値を0に設定
public function getOrderCount(){
//orderCountプロパティのゲッターを定義
return $this->orderCount;
//orderCountプロパティをreturenする
}
public function setOrderCount($orderCount){
//orderCountプロパティのセッターを定義
$this->orderCount =$orderCount;
} //引数を$orderCountとするorderCountプロパティに$orderCountを代入する。
}
$juice->setOrderCount(2); //セッターを用いて引数2をセット
//$juice->orderCount = 2;だと、privateのためアクセスできない
?>
<p>注文数: <?php echo $menu->getOrderCount(); ?></p>
//ゲッターを用いてorderCountプロパティを表示する
プロパティの初期値
プロパティを定義する際、初期値を設定することができる。
private $orderCount = 0;
【PHP】オブジェクト指向
クラスとインスタンス
クラス(設計図)をもとに生成された実体をインスタンスと呼ぶ。
インスタンスとオブジェクトは同じ意味で使われる。
インスタンスの生成
nee クラス名();でインスタンスを生成する。
<?php
class Menu {
} //Menuクラスを定義
$menu1 = new Menu(); //インスタンスを生成し、$menu1に代入。
$menu2 = new Menu();
$menu3 = new Menu();
?>
プロパティとメソッド
クラス(設計図)には、そのインスタンス(実体)が持つ「プロパティ」と「メソッド」の2つを定義する。
プロパティの定義・プロパティへのアクセス
<?php
class Menu {
public $name; //public $プロパティ名; で定義する
$curry = new Menu();
$curry->name = 'curry';
//$curryインスタンスのnameプロパティに'curry'を代入
esho $curry->name;
//結果:CURRY ($curryインスタンスのnameプロパティを呼び出す)
}
?>
メソッドの定義・メソッドへのアクセス
メソッドとは、それぞれのインスタンスがもつ関数のこと。
<?php
class Menu {
public function hello(){
echo '私はMenuクラスのインスタンスです'; //helloメソッドを定義
}
$curry->hello();
}
?>
変数 $this
メソッド内でインスタンスのプロパティやメソッドにアクセスしたい時は、$thisという変数を使う。
$thisはクラス内のメソッドの定義の中でのみ使える。
$thisはメソッドが呼び出された時に、そのメソッドを呼び出しているインスタンスに置き換えられる。
<?php
class Menu {
public function hello(){
echo '私の名前は'.$this->name.'です';
}
}
$curry = new Menu();
$curry->name = 'curry';
$curry->hello(); //$thisは、メソッドを呼び出している$curryインスタンスに置き換えられる
コンストラクタ
__construct(アンダーバー2つで始まる)というメソッドを定義すると、newを用いてインスタンスを生成する時に、このメソッドが自動的に呼び出される。
class Menu{
public function __construct(){
echo '1つのメニューが作成されました';
}
}
$curry = new Menu();
//結果:1つのメニューが作成されました(コンストラクタが呼び出される)
コンストラクタと引数
__constructメソッドは引数をとることができる。
newを用いてインスタンスを生成する際には引数を与えることができ、その引数の値が__constructメソッドに渡される。
class Menu{
public $name;
public function __construct($name){ //引数'CURRY'を$nameで受け取る
echo $name; //$nameで受け取った引数'CURRY'を出力
}
}
$curry = new Menu('CURRY'); //ここで引数'CURRY'を与える
//結果:CURRY
class Menu{
public $name;
public function __construct($name){
$this->name = $name; //生成されるインスタンスに値をセットする
}
}
$curry = new Menu('CURRY'); //インスタンスの生成時にプロパティをセットすることができる
echo $curry->name;
//結果:CURRY
【MySQL】カラムの追加・変更・削除
〈 前提 〉
mysql> SELECT * FROM items;
と実行すると、下記のように表示されるテーブルを用意する。
+----+--------------+-------+----------+
| id | name | price | category |
+----+--------------+-------+----------+
| 1 | にんじん | 60 | 野菜 |
| 2 | バナナ | 200 | 果物 |
| 3 | 牛乳 | 120 | 飲料 |
+----+--------------+-------+----------+
3 rows in set (0.00 sec)
カラムを追加する
例:mysql> ALTER TABLE items ADD COKUMN stock INT;
mysql> SELECT * FROM items;
+----+--------------+-------+----------+-------+
| id | name | price | category | stock |
+----+--------------+-------+----------+-------+
| 1 | にんじん | 60 | 野菜 | NULL |
| 2 | バナナ | 200 | 果物 | NULL |
| 3 | 牛乳 | 120 | 飲料 | NULL |
+----+--------------+-------+----------+-------+
3 rows in set (0.00 sec)
このようにカラムを追加すると、中身がNULLのカラムが追加される。
そこでUPDATEクエリを使って値を設定する。
mysql> UPDATE items SET stock = 100 WHERE id = 1;
mysql> UPDATE items SET stock = 150 WHERE id = 2;
mysql> UPDATE items SET stock = 80 WHERE id = 3;
mysql> SELECT * FROM items;
+----+--------------+-------+----------+-------+
| id | name | price | category | stock |
+----+--------------+-------+----------+-------+
| 1 | にんじん | 60 | 野菜 | 100 |
| 2 | バナナ | 200 | 果物 | 150 |
| 3 | 牛乳 | 120 | 飲料 | 80 |
+----+--------------+-------+----------+-------+
3 rows in set (0.00 sec)
カラム名を変更する
カラム名を変更するクエリでは、カラムのデータ型を入力する必要がある。
まずはデータ型を確認するため以下のクエリを実行する。
Typeの列がデータ型を表している。
mysql> DESCRIBE items;
+----------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | text | YES | | NULL | |
| price | int(11) | YES | | NULL | |
| category | text | YES | | NULL | |
| stock | int(11) | YES | | NULL | |
+----------+---------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
カラム名変更のクエリを実行する。
例:ALTER TABLE items CHANGE COLUMN price cost INT;
カラムを削除する
例:ALTER TABLE items DROP COLUMN category;
【MySQL】ログイン / データベース・テーブルの作成
MySQLにログインする
ターミナルにて、サーバーを立ち上げる。
$ mysql.server restart
その後ログインを実行。
$ mysql -u root -p
パスワードを求められるので入力する。
Enter password:
mysql> という表示になれば準備完了。
データベースを確認
まずはデータベースを確認するコマンドを実行すると、現在のデータベース一覧が見られる。
mysql> SHOW databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
データベースの作成
データベースはプロジェクトごとに作成する。
下記クエリにて新しいデータベースを作成する。
mysql> CREATE DATABASE プロジェクト名;
Query OK, 1 row affected と表示されたらデータベースが作成されている
テーブルの作成
テーブルの作成の前に、まずはデータベースを選択する。
mysql> USE データベース名;
Database changedと表示されたらデータベースの選択が完了。
続いて下記のクエリでテーブルを作成する。
公式:mysql>CREATE TABLE テーブル名(
カラム名 データタイプ オプション,
カラム名 データタイプ オプション,
PRIMARY KEY (id) //プライマリーキーをidに設定
);
例:mysql> CREATE TABLE users (id INT AUTO_INCREMENT, name TEXT, PRIMARY KEY (id));
例のクエリを実行し、DESCRIBEを使ってテーブル構造を表示してみると、以下の通り表示される。
mysql> DESCRIBE users;
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | text | YES | | NULL | |
+-------+---------+------+-----+---------+----------------+
プライマリーキーとは
プライマリーキーとはレコードを識別するための制約で、設定したカラムには重複する値を挿入できなくなる。
例で作成したテーブルにおいては、プライマリーキーの設定されている id カラムに値「1」が存在すると、新しく挿入するレコードの id カラムに値「1」をいれることができなくなる。
また、 id カラムにAUTO_INCREMENTを設定し、id カラムをプライマリーキーに指定することで意識をしなくても重複しない値が割り当てられるようになる。
テーブルにデータを挿入する
作成したテーブルにデータを挿入し、そのデータを取得してみる。
mysql> INSERT INTO users(name) VALUES ('ねこ');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM users;
+----+-----------------------+
| id | name |
+----+-----------------------+
| 1 | ねこ |
+----+-----------------------+
テーブル・データベースの削除
・テーブルの削除
・データベースの削除
DROP DATABASE データベース名;
MySQLを終了する
exit;
【SQL】データの取得(SELECT・FROM・WHERE・ORDER BY・LIMIT)
① purchasesテーブルから、nameカラムのデータを取得する
SELECT name
FROM purchases;
② purchasesテーブルから、nameカラムとpriceカラムのデータを取得する
SELECT name,price
FROM purchases;
③ purchasesテーブルから、全てのカラムのデータを取得する
SELECT *
FROM purchases;
以下、SELECT * FROM purchases; の下に追記するものとする。
④ categoryカラムが「食費」であるデータを取得する
SELECT *
FROM purchases
WHERE category ="食費";
※数字はダブルクォーテーション不要(WHERE price =1000;)
※日付データはダブルクォーテーション必要(WHERE purchased_at ="2021-03-06";)
⑤ 比較演算子を用いる
priceが1000以上→ WHERE price >= 1000;
purchased_at が日付以前→ WHERE purchased_at <="2021-03-06";
nameカラムに”プリン”を含む→ WHERE name LIKE "%プリン%";
nameカラムが”プリン”で始まる(前方一致)→ WHERE name LIKE "プリン%";
nameカラムが”プリン”で終わる(後方一致)→ WHERE name LIKE "%プリン";
⑦ NOT演算子を用いる
character_name カラムが”いぬ”でない→ WHERE NOT character_name ="いぬ";
nameカラムに”プリン”を含まない→ WHERE NOT name LIKE "%プリン%";
⑧IS NULL・IS NOT NULLを用いる
priceカラムがNULL→ WHERE price IS NULL;
priceカラムがNULLでない→ WHERE price IS NOT NULL;
cateforyカラムが”お菓子”、かつcharacter_nameカラムが”うさぎ”
→WHERE category ="お菓子"
AND character_category ="うさぎ";
cateforyカラムが”お菓子”、またはcharacter_nameカラムが”うさぎ”
→WHERE category ="お菓子"
OR character_category ="うさぎ";
⑩ORDER BYで並べ替える・LIMITで数を制限する
公式:ORDER BY 並べ替えたいカラム名 並べ方;
並べ方:ASC(昇順)、DESC(降順)
※WHEREと併用することもできる。クエリの最後に記述する。
公式:LIMIT データの件数;
※WHEREと併用することもできる。クエリの最後に記述する。
このふたつを組み合わせることで、上位5件のように指定することができる。
【エラー備忘録】-bash: nmp: command not found
・エラー内容
ターミナルにて
$ nmp install
というコマンドを実行しようとしたところ、
-bash: nmp: command not found
というエラーが表示された。
・原因
nmpがインストールされていない。
nmpとは
-
Node Package Manager の略。
-
JavaScript 系のパッケージを管理するツール。
node.jsのダウンロード手順
-
homebrewでnodebrewをインストール
-
nodebrewでnode.jsをインストール
まずはターミナルにて、homebrewを使ってnodebrewをインストールする。確認のためbrew listと入力し、nodebrewが入っていれば完了。
$ nodebrew setup
と入力し実行すると、
Fetching nodebrew...
Installed nodebrew in $HOME/.nodebrew
========================================
Export a path to nodebrew:
export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================
と表示されるので、続いて下記コマンドにて環境変数の設定をする。
最後にnodebrewを使ってnode.jsをインストールする。
$ nodebrew install-binary stable
→Installed successfully と表示される。
念のため確認する
$ nodebrew list
→v14.16.0
current: none と表示される。