PHP関連のことを調べてみた2021年08月07日

PHP関連のことを調べてみた2021年08月07日

【レビュー指摘】phpunitで書いたテストコードのレビューで受けた指摘をまとめてみる。

最近は、Laravelで作られたアプリのテストコードをphpunitで書いています。

今回はphpunitのテストコードについてレビューを受けた際の指摘内容について、二度と同じ指摘をされないようにするためにまとめておこうと思います。中にはphpunitの書き方への指摘というよりはプログラムの書き方自体への指摘や、プロジェクト固有の指摘もあるので、そこら辺は参考程度に見てもらえると嬉しいです。

## 指摘1 :man: <( expectとactualの順序は正しくね ) 第一引数が`expect`、第二が`actual`。 ```.php $this->assertSame($expect, $actual);
“`

## 指摘2 :man: <( プロパティはprotectedに。型の説明も記載しましょう ) テストクラスのプロパティには`protected`を使う。 読みやすいように変数の型も記載する。 **■Before** ```.php private $UserProfileModel; ``` ■**After** ```php protected Us

元記事を表示

データベースからデータを取り出す PHP/MYSQL

#■はじめに
PHPでデータベースと接続しておく
以前に記事を書いたのでそちらを参照ください。
https://qiita.com/pito555/items/77d2f141846a40d8c659

#■①SQL文の準備
$sqlとしてSQL文を入れる変数を用意

●下記SQL文の意味
左から読むとわかりやすい!
テーブル名 FROM(から) *(全部) SELECT(選択)

“` php
$sql = ‘SELECT * FROM テーブル名’;
“`

#■②SQLの実行
$SQL文を実行するために記述します。

▼ $dbh 以前データベースに接続するために書いたPDOを格納しているもの
▼ query 問い合わせる
▼ $sql 実行するSQL文
▼ $stmt PDOStatementとして実行される。

“` php
$stmt = $dbh->query($sql);
“`

#■③SQLの結果を受け取る。
▼fetchAll
全ての行を返す。

フェッチモードを使いデータの結果を受け取る。
PDOでデータベースからデータを取り出した時に配列の形式を指

元記事を表示

In PackageManifest.php line 122: Undefined index: nameでなんか詰まった話

composer2にしたら起きている問題らしい
とりあえずやったことをメモメモ

なんかkey:generateしたらこれが出た

“`
In PackageManifest.php line 122: Undefined index: name
“`

composerのバージョンが1 から 2にしたときに起きたみたい。
合わせいないといけないものだったため、composerを1にする方法で解決した。

バージョン確認して

“`
composer –version
“`

とりあえず 下げてみる
下げるコマンド

“`
composer self-update –1
“`

ちなみに2にする場合はコマンドの1を2にすればいい

以上!!!!

元記事を表示

PHP 基本文法学んでみた

PHP基本文法

僕はRubyをやっていたのでPHPの基本文法はだいぶハードルが低かったです。
早速やっていきましょう!!

PHPとはスクリプト言語でありシンプルな記述だけど大規模アプリケーションの開発ができる。
フレームワークの例として、Laravel(ララベル)、CakePHP(ケイクピーエイチピー)、Zend(ゼンド)などがある。

プログラムの基本構造は3つ!!
1.順次進行  上から順に処理
2.条件分岐  if文などでほにゃららの場合これこれの処理を行う..など
3.繰り返し for文などで◯回繰り返しす処理だど

・・・Rubyとかと考え方はおんなじだね~~やったぜ?

」で終わる
終わりの「?>」は省略可能!
「\n」は改行という意味。
Echoで文字列や変数の中身を参照!!
処理の終わりのセミコロンのは注意ですな^^ Rubyはいらないからね
こういう記述の仕方は何回かやってけば覚えるもんだから大丈夫かな
php Greeting.php ←このコマンドで実行!!
![Good morning.png](

Laravel-Excelで大容量のエクセルファイルをエクスポートする際の対策

## 背景
Laravelには特定のモデルのレコードをエクセル形式で読み書きしてくれる[Laravel-Excel](https://laravel-excel.com/)というライブラリが存在する。

しかし多くのレコードをエクスポートすると処理時間が長引き、クレームやユーザーの離脱等が発生すると考えられる。

その際の対策をサンプルコードも含めてメモ。

## 大容量ファイルのエクスポート

### 方針

1. 処理をLaravelの[Queue](https://laravel.com/docs/8.x/queues)に入れる
2. エクスポート処理
3. エクスポートが終わったらエクセルファイルをS3にアップロード
4. ユーザーにダウンロードリンクをメール通知

### 実装

※本記事ではLaravel-Excelのインストール方法は対象外とします。

以下のartisanコマンドを実行

“`shell
php artisan make:export UsersExport –model=User
“`

下記のようなファイルが生成される。

“`php:b

基礎②〜if文、else、else if文〜 php

# はじめに
If文、for文は基礎的なものだが理解するまでに時間がかかったので今回もまとめてみることにした。具体的な構文は言語によって異なるが、今回はPHPでまとめていきたいと思う。

# 内容

## if文について
Ifとは日本語で「もし〜であれば/ならば」という意味で使われる。
それと同様にプログラミングの世界でも「もし〜ならば」実行するといった、
特定の処理の場合に使われる。

例1:

“`php
$a = 100;
if($a > 50){
//ここで条件を指定する。
echo “$aは50より大きい”;
//処理の実行
}
“`
結果: `$aは50より大きい`

100という数字は50より大きいので「$aは50より大きい」という結果になった。

それでは条件が成り立たなかった場合を見てみる

例2:

“`php
$a = 100;
if($a > 150){
echo “$aは150より大きい”;
}
“`

結果: (条件が成り立たないため処理が実行されず何も表示れない)

## else、else if文

29_新規プロジェクトの作成や初期設定について

##概要
新規プロジェクトを作成するときのコマンドと手順をおさらいしましょう。

##新規プロジェクトの作成
2通りのコマンドがあります。
※ここではプロジェクト名をsrcとしています。

##バーションを指定せずに作成
“`terminal
laravel new src
“`

##バージョンを指定して作成
“`terminal
composer create-project –prefer-dist laravel/laravel src “6.*”
“`

##初期設定
###タイムゾーンの変更
“`config/app.php
‘timezone’ => ‘UTC’,
// UTCをAsia/Tokyoに変更
‘timezone’ => ‘Asia/Tokyo’,
“`

###言語の変更
localとfallback_localの2箇所で設定がありますが、falllback_localは該当言語が見つからない場合の言語なので、enのままにしておきます。
また、**resources\lang**にjaの設定が保存されているフォルダとja.jsonファイルが必要

連想配列からキーと値を指定して抽出する

データベースからレコードを取得した際、大体は以下のような二次元の連想配列である。
この時、あるキーにおいて指定の値を持つものを抽出したいことがある。

“`php:元データ
$array = [
0 => [‘id’ => 1, ‘blood’ => ‘A’, ‘name’ => ‘yamada’],
1 => [‘id’ => 2, ‘blood’ => ‘B’, ‘name’ => ‘tanaka’],
2 => [‘id’ => 3, ‘blood’ => ‘O’, ‘name’ => ‘satake’],
3 => [‘id’ => 4, ‘blood’ => ‘B’, ‘name’ => ‘murata’],
4 => [‘id’ => 5, ‘blood’ => ‘B’, ‘name’ => ‘takeda’]
];
“`

例えば、キー `blood` の値が `B` のものを抽出する場合は以下。[^1]

“`php:
$new_array = array_filter($array, fn($a) => $a[‘bloo

[PHP]foreachで各要素の値を更新する時はkeyでしよう

# この記事の内容
「foreachで回した要素自体の値を更新したい」といったことが、たまにあるかと思います。
(あるよね…?)

上記の要件を満たしたいと思った時に
・参照渡しを使う
・foreachのkeyを使う
大きく分けて上記2種類の方法があると思ってるのですが、個人的にはkeyを使用した方法を使いたいなと感じたので、その辺りの方法とメリデメを残しておこうと思います。

間違ってる点あれば、ご指摘頂ければ幸いです。

# 環境
“`bash:ターミナル
$ php -v
PHP 7.1.33 (cli) (built: Oct 31 2019 17:37:57) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
“`

## ダメなパターン
まずおさらいですが、普通にforeachで値をそのまま代入しても値は変わりません。
foreachを使用すると、元の値のコピーが作られる為です。

“`php
$te

PDOでMYSQLに接続 PHP

#■はじめに
●phpMyadminでデータベースとテーブルを作成している事

●データベースに接続するユーザーを作成する。この時にパスワードも設定しておく。
ユーザーごとに操作権限を決めると誤って必要なものを消したりする可能性が低くなる。
あなたはテーブルだけの権限ね
あなたはカラムのだけの権限ね

#■PDOを使いMYSQLに接続します。
PDOとはPHPでMYSQLに接続するのに必要なもの

“` php
$dbh = newPDO($dsn,$user,$pass);

//結果 下記のように表示されれば成功
object(PDO)#1 (0){}
“`

####▼$dbh
データベースハンドルの略 データベースを操作しますよと言う変数

####▼newPDO
PDO接続を呼び出す。
PDOクラスのインスタンスを作成

####▼$dsn
データソースネームの略
接続したいデータベースの情報を書く
下記のような決まった書き方がある。

“` php
$dsn = ‘mysql:host=localhost;dbname=データベースの名前;charset=utf8’

【Laravel】デフォルトで出力されない例外(HTTPエラー等)をログに出力する

#結論
`App\Exceptions\Handler.php`で`$internalDontReport`配列を、空の配列でオーバーライドする。

#説明
Laravelの例外はすべて`vendor\laravel\framework\src\Illuminate\Foundation\Exceptions\Handler`クラスでcatchされ、ログの出力とユーザへの表示を行います。

ログの出力は`report`メソッドが担当しています。

“`php
public function report(Exception $e)
{
if ($this->shouldntReport($e)) {
return;
}

if (Reflector::isCallable($reportCallable = [$e, ‘report’])) {
if (($response = $this->container->call($reportCallable)) !== fa

はじめまして、

はじめまして、miru-kululuです。
よろしくお願い致します。
#駆け出しエンジニアとつながりたい
#本日の積み重ね

Herokuで簡単なPHPプログラムを動かす

Heroku上で簡単なPHPプログラムを動かします。
こちらの記事は、初学者の方にも分かりやすいよう簡単な説明を心がけています。

##環境
OS:Windows10 Pro 64bit

##事前準備

* Herokuにアカウントを作成
* Gitのインストール
* Heroku CLIのインストール

####Herokuにアカウントを作成
Herokuを利用するにはアカウント登録が必要です。
[https://jp.heroku.com/](https://jp.heroku.com/)
heroku_hp

なお、無料、有料どちらのプランもありますが、個人で利用する程度ならば無料プランで十分でしょう。無料枠の制限についてはこちらに説明があります。
[https://jp.heroku.com/fr

基礎①〜文字列、数値、変数〜 php

-はじめに-

基礎的な部分の理解度が思ったよりできていなかったため自分なりにまとめてみた。

-内容-

・PHPについて

言語としての特徴 

・web開発に適しており、HTMLに組み込むことができる
・JavaScript とは異なりコードがサーバーで実行されその結果クライアントに送信することがでる

参考:https://www.php.net/manual/ja/intro-whatis.php

・文字列と数値の違いについて

クオテーションを使用しコンピューターの中で言語を文字として認識してもらう、数値として認識してもらうことを指します。

例1:

echo 1+1 ;
//結果: 2

上記の場合クオテーションを使用しなかったため、コンピューター上において数値と認識されたため、結果として「2」という答えがでました。

例2:

echo “1+1”;
//結果: “1+1”

上記の場合ダブルクオテーションを使用したため、コンピューター上で文字列と判断され結果として「”1+1”」という答えがでました。

注意!)クオテーショ

加算子,減算子 , count PHP

-はじめに-

問題を解いていく中でcountと$++についてつづいたので自分なりに調べ考えをまとめてみた。

-内容-

・countについて 

count

変数に含まれるすべての要素、 あるいはオブジェクトに含まれる何かの数を数えます。
参考:https://www.php.net/manual/ja/function.count.php

・加算子/減算子について

++\$a 前置加算子 $a に 1 を加え、$a を返します。
$a++ 後置加算子 $a を返し、$a に1を加えます。
–$a 前置減算子 $a から 1 を引き、$a を返します。
$a– 後置減算 $a を返し、$a から 1 を引きます。

インクリメント演算子=増加させる演算子
for文などの繰り返し文で、1ずつ増やす処理をする時によく使われる。

「i」が変数で「++」がインクリメント演算子で対象の値を1つ増やすことがわかったら、「i++」の意味も分かってくる。

「i++」は

変数「i」に値を1追加する

という意味になる。

参考:https://w

【Laravel】Class (…) not foundの対処

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/874156/f96022de-e4c3-5807-a5bf-d6130d77060a.png)

#結論
###自分で作成したモデルのnamespace宣言が誤っていた。

`php artisan make:model`コマンドでモデルを作成した場合は自動的に名前空間が登録されるようですが、
コマンドを使用せず自分でモデルを追加した場合、別途登録してあげる必要があるようです。

#発生したコード

“`php
// App\Models\PasswordResetsという名前空間をインポートしているのに
use App\Models\PasswordResets;

class ResetPasswordController extends Controller
{

public function showResetForm(Request $request, $token = null)
{
/

ポートフォリオ「Fishing App」

PHPをお使いになる会社のインターンが決まったので、これを気にLaravel、Vue.jsを使ってポートフォリオを作成しました。

#ポートフォリオ
URL: https://fishingapp.work/
![topImage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/848640/3260524d-ed49-58ce-3ced-83ea9958f087.png)

Fishing Appとは、釣りスポットを投稿し、釣りスポットにコメントして釣果などを共有するアプリです。また、釣りスポットにおすすめの釣り方を選択することもできます。さらに、カレンダーで釣りの予定、記録をすることができ、このアプリ1つで満足できます。

##制作背景

1,初心者に釣りの知見を広めてほしいため

現在は釣りの技術が発展しており、釣りを始める人が日々増加しています。しかし、初心者の場合、どこで釣りができるかわからない、どんな釣り方があるのかわからないという方々がほとんどだと思います。そこで、釣りスポット

Laravel IDE helperのide-helper:modelで生成されるPHPdocはどこに記載すべきか

## 背景

Laravel + PHPStormで開発しているとmodel等の補完が効かず辛い。

そこで[Laravel IDE Helper Generator](https://github.com/barryvdh/laravel-ide-helper)の出番

これを導入すると、modelに定義してあるプロパティやスコープなどをサジェストしてくれる。

## 問題

この機能はライブラリがモデルのPHPdocを自動生成しIDEが参照することで実現している。

PHPdocをどこに生成するかはコマンドのオプションで選択可能。

“`shell
# モデルクラスに直接生成
php artisan ide-helper:model –write

# 専用のファイルに別で生成
php artisan ide-help

Brefを利用したサーバレスLaravelアプリケーションの構築

Brefを理解するためにプロジェクト作り直して一から勉強中の忘備録。

[Bref](https://bref.sh/)とは[Serverless Framework](https://www.serverless.com/)を利用して[AWS Lambda](https://docs.aws.amazon.com/lambda/)のPHPアプリケーションを簡単に構築してくれるもの。
以下は[Laravel](http://laravel.jp/)でのBref導入時の手順。

### 1. Serverless Frameworkのインストール

“`
$ npm install -g serverless
$ serverless config credentials –provider aws –key –secret
“`

Serverless Frameworkとは、AWSならCloudFromationなどクラウドの構築管理サービスといい感じに連携してくれるやつ。(説明雑

### 2. Laravelプロジェクトを作成

“`
$

ポートフォリオとして、絵本読み聞かせ記録のWebアプリを作成しました。【Laravel / Docker / AWS / CircleCI】

# はじめに
### 記事の目的
**ポートフォリオとして作成したWebアプリケーションの紹介記事です。**
![スクリーンショット 2021-07-29 20.52.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527226/9a393f98-b233-a80a-63db-fcc85f076133.png)
注: 絵本読み聞かせ記録 とは、録音再生などの機能ではなく、テキストのみの記録です

主な使用技術は、言語/フレームワークは**PHP/Laravel**、開発環境は**Docker**、本番環境は**AWS(EC2,RDS,S3など)**、CI/CDパイプライン構築は**CircleCI**で作成しています。

また、**アプリ自体のご紹介**のほか、**アプリ作成に至るまでの学習内容**などにも触れられたらと思います。

目次は以下のとおりです。
[1. 作成したアプリについて](#1-作成したアプリについて)
[2. 作成した目的・背景について](#2-作成した目的背景について)
[