20200207のPHPに関する記事は4件です。

PHP(初級編) - 変数の表示の仕方、繰り返し処理、分岐処理の書き方

変数定義や配列、if文やfor文の基本的な概念?書き方?はC言語とほとんど同じだったので省略。
以下、PHPっぽいなと思った書き方の決まりを記録します。

変数の表示

表示する時の変数には「$」を前につける + 改行をつける場合は「$変数.'<br>'」と書く。

index.php
$i = 0;
echo $i.'<br>';

繰り返し処理、分岐処理

if文やfor文の()内の変数は全て「$」をつける

index.php
for($i=0; $i<10; $i++){
  if($i % 3 == 0){
    .....
  }
  ...
}

breakはループを完全に抜ける、continueは現在の周だけスキップしてループは続ける

index.php
    for($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
13

foreach文は配列のための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点です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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=UsersSeeder

Seederを逆生成する

サーバーを移行する際に、データベースを引っ越すときに使えるかもしれない。
あとは新規でプロジェクトに入った人とかにローカル環境のデータを皆で共有するときとかに

$ 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

随時追加予定。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

比較演算子と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は等しい
    • 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サーバーサイドプログラミング入門

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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}",
        ]);

細かい部分ですが、つまずいたポイントなので復習がてらにまとめてみました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む