- 投稿日:2020-02-07T21:16:21+09:00
PHP(初級編) - 変数の表示の仕方、繰り返し処理、分岐処理の書き方
変数定義や配列、if文やfor文の基本的な概念?書き方?はC言語とほとんど同じだったので省略。
以下、PHPっぽいなと思った書き方の決まりを記録します。変数の表示
表示する時の変数には「$」を前につける + 改行をつける場合は「
$変数.'<br>'
」と書く。index.php$i = 0; echo $i.'<br>';繰り返し処理、分岐処理
if文やfor文の()内の変数は全て「$」をつける
index.phpfor($i=0; $i<10; $i++){ if($i % 3 == 0){ ..... } ... }breakはループを完全に抜ける、continueは現在の周だけスキップしてループは続ける
index.phpfor($i=1; $i<=1000; $i++){ if($i % 3 == 0){ continue; } echo $i.'<br>'; }こうすると、iが1〜1000の間for文が回されるが、3の倍数の時だけ、echoまでいかずに次のiにいく。
結果はこんな感じなる。
1
2
4
5
7
8
10
11
13foreach文は配列のためのfor文みたいな感じ
foreach文は初めてみた。(私の学習した中の言語では。)
配列の値を順番に取り出してくれるらしい。
配列のキーを取り出すには$key
を。値を取り出すには$value
を使う。
foreachの()内は(
配列as
キー変数=>
値変数)
と書く。index.php$scores = array('数学' => 70, '英語' => 90, '国語' => 80); foreach($scores as $key => $value){ echo $key.'は'.$value.'点です。<br>'; }結果はこうなります。
数学は70点です。
英語は90点です。
国語は80点です。
- 投稿日:2020-02-07T11:02:02+09:00
Laravel用コマンドチートシート
Laravelプロジェクトの作成
composer create-project --prefer-dist laravel/laravel プロジェクト名起動
$ cd SampleProject $ php artisan serveモデルの作成
$ php artisan make:model CreateModelコントローラーの作成
$ php artisan make:controller CreateControllerマイグレーションコマンド系
$ php artisan make:migration make_migration マイグレーションファイル作成 $ php artisan migrate マイグレーションの実行 $ php artisan migrate:refresh 全てのマイグレーションをリセットし、再度実行 $ php artisan migrate:reset 全てのマイグレーションをロールバックシーダーコマンド系
$ php artisan make:seeder UsersSeeder シーダーファイル作成 $ php artisan db:seed シーダー実行 $ php artisan db:seed --class=UsersSeederSeederを逆生成する
サーバーを移行する際に、データベースを引っ越すときに使えるかもしれない。
あとは新規でプロジェクトに入った人とかにローカル環境のデータを皆で共有するときとかに$ composer require --dev "orangehill/iseed" $ vim config/app.php 'providers' => [ Orangehill\Iseed\IseedServiceProvider::class, #追加 ],$ php artisan iseed {table_name}仮に、categoriesテーブルだとすると、以下のようになります。
CategoriesTableSeeder.php// database/seeds/CategoriesTableSeeder.php <?php use Illuminate\Database\Seeder; class CategoriesTableSeeder extends Seeder { /** * Auto generated seed file * * @return void */ public function run() { \DB::table('categories')->delete(); \DB::table('categories')->insert(array ( 0 => array ( 'id' => 1, /* ...(中略)... */ ), 1 => array ( 'id' => 2, /* ...(中略)... */ ), 2 =>キャッシュクリア系
Laravel、Apacheやnginxを再起動したとしても、内部のキャッシュが残っててしまって、更新したプログラムをうまく反映してくれない時がある。
$ php artisan cache:clear $ php artisan config:clear $ php artisan route:clear $ php artisan view:clear随時追加予定。
- 投稿日:2020-02-07T01:49:28+09:00
比較演算子とfor構文
- while構文
$i = 1; while ($i <= 365){ print $i . PHP_EOL; $i = $i + 1; }
- 比較演算子
<=
- 不等号のこと
A<B
数学ではAがBより小さい
- プログラミングの中でも使うことができる
A≦B
数学ではAがB以下
- ≦はプログラムの中で使うことができない
- 変わりに
<=
を使うA=B
数学ではAとBは等しい
- =は代入で使ってしまっているので使えない
- 変わりに
===
を使う==
と===
は似ているが少し違う- 参考記事:PHP比較演算子「==」と「===」の違いについて
A≠B
AとBが等しくない
- プログラミングで≠は使えない
- 変わりに
!==
を使う!A
Aではない
$i = $i + 1;
をもっと簡単に書く方法
$i += 1;
→$i++;
(インクリメント)$i -= 1;
→$i--;
(デクリメント)
- 掛け算と割り算には用意されていないので普通に書く
$i *= 5;
$i /= 5;
for構文
for ($i=1; $i<=365; $i++){ print $i . PHP_EOL; }↓↓↓↓↓
for (初期化処理; 繰り返す条件; 更新処理){ 繰り返したい処理 }
- for構文使えば、上のようなwhile構文もスッキリまとめることができる
- 単純に◯回繰り返す、同じ変数を使って計算をして繰り返すような、簡単な繰り返し処理であればfor構文を使った方が良い
- ただし初期化処理や更新処理が複雑になっている場合もある。その場合は、無理やりfor構文にまとめようとせず、while構文をつかようにする
- 使い分けに迷ったらwhile構文を使う
※参考:Udemy/Webサーバーサイドプログラミング入門
- 投稿日:2020-02-07T00:02:24+09:00
Laravel バリデーションで変数を利用
Laravelのバリデーションで変数の使い方
なぜ気になったのか
ECサイトを制作中に、商品をカートに追加する際にデータベース上の商品の在庫数以上の数を買い物かごに入れることができてしまう。
バリデーションを利用するときに商品の在庫数はそれぞれ異なるので固定の値は設定できない。
商品ごとにデータベースの商品の在庫数をMAXとしてそれ以上買い物かごに入れる時にはバリデーションを発動してエラーメッセージを出したかったから。まず試したこと
$data['test'] = 5; $max = 10; $validator = Validator::make($data, [ 'test' => 'max:$max', ]);これでは全くバリデーションは効かず
ではどうするべきか。
PHPで変数を文字列内で展開したい場合は変数を
{ }
(波括弧)で囲って書くことで、文字列の中に変数があること明示している。
ただし、文字列の中に変数を入れる場合は、文字列を必ず" "
(ダブルクォーテーション)で囲む必要がある。
詳しくはPHPマニュアルこれを踏まえて下記で実行してみました。
$data['test'] = 5; $max = 10; $validator = Validator::make($data, [ 'test' => "max:{$max}", ]);しかしこれでもうまくいきませんでした。
何が必要なのか。
Laravelバリデーションの
min
max
size
などを利用するときは指定された値を判断する。
そのため、上記の書き方では文字列と判断され値は文字長を判断する。
詳しくはLaravel5.5 バリデーション
在庫数などの数値を判断する場合にはmax
の前に整数値であるバリデーションが必要なためinteger
を記述する必要がある。これを踏まえると下記の書き方になる。
$data['test'] = 5; $max = 10; $validator = Validator::make($data, [ 'test' => "integer|max:{$max}", ]);細かい部分ですが、つまずいたポイントなので復習がてらにまとめてみました。