PHP関連のことを調べてみた2022年04月22日

PHP関連のことを調べてみた2022年04月22日

Laravel MVCの仕組みとWEB3層構造

## MVCとは
* アプリケーションを実装するためのデザインパターン
* アプリケーションの役割を分ける

### Model(データ処理)
データベースへのアクセス(登録・更新・削除・検索の実行)やデータの加工等々、
データにまつわる処理全般を請け負う。

### View(ブラウザに表示される画面を作る)
Controllerから取得したデータをテンプレートを使ってブラウザに出力する。

### Controller
画面からの入力値をModel層の処理機能へデータとして引き渡したり、
データベースから取得したデータを画面へ表示するためにView層へ渡したりと
ViewとModelの間を取り持つ。

## WEB3層構造
* ブラウザ(クライアント)
* プレゼンテーション層(WEBサーバ)
* アプリケーション層(APサーバ)
* データベース層(DBサーバ)

クライアントからの処理をするサーバがプレゼンテーション層・アプリケーション層・データベース層の3層から構成されているため、WEB3層構造という。

#### クライアント
利用者からの入力を受け付け、結果を出力する。

元記事を表示

テキストエディタの違い(シンタックスハイライト)

テキストエディタでコーディングしていて、気になったことがあります。

# シンタックスハイライト
コードを書くときにどこまでシンタックスハイライトがつくかエディタによって違いがあるようです。
例1
“`php_sample1.php

元記事を表示

【php】文字列操作基礎

### 複数行の入力

ヒアドキュメントと呼ばれる方法。EOMの目印が出てくるまで文字列を出力する

“`PHP
echo <<< EOM one two three EOM; ``` ### 小文字から大文字に変換 ```PHP echo strtoupper('hello world!'); ``` ```PHP HELLO WORLD! ``` ### 文字列の一部を取得 substr(string, 取り出し開始位置, length); ```PHP echo substr('abcde', 0, 2); ``` ```PHP ab ``` ### 配列の中の最大値・最小値を取り出す ```PHP $array = array(1, 2, 3, 4); echo max($array); echo min($array); ``` ```PHP 4 1 ``` ### 文字列の中の特定の要素の個数をカウント ```PHP echo substr_count("aAaAaA", "A"); ``` ```PHP 3 ``` ### 文字列の文字数をカウント

元記事を表示

XAMPPでPHPのバージョンを複数持つ

XAMPPでPHPのバージョンを複数持つ方法を調べて試行錯誤した結果うまくいったので備忘録として残しておく。

# 準備
[XAMPPのサイト](https://www.apachefriends.org/jp/index.html)からポータブル版(exeではなくzipがいい)の欲しいPHPのバージョンが入っているデータを持ってくる。
今回は7.1と8.1で進めていく。

# 実践
1. 持ってきたデータをどっちかひとつ解凍する。どっちでもいいがここでは便宜上7.1を解凍する。解凍したのはxamppを運用したい場所(C直下とか)に置く。ここでは便宜上Cドライブの直下に置く。

2. 移動したxamppフォルダの中に「PHP」「Apache」「phpMyAdmin」というフォルダがあるので、それをそれぞれ「PHP71」「Apache71」「phpMyAdmin71」という名前にリネームする
3. 次に8.1を解凍する。その中にもやっぱり「PHP」「Apache」「phpMyAdmin」というフォルダがあるのでそれらをそれぞれ「PHP81」「Apache81」「phpMyAdmin81」

元記事を表示

【PHPUnit】テストデータ作成時はFakerを積極的に使おう

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## テストデータを作成するとき
テストケースではパラメーターに入れる値などを直接入れないほうがいいらしい。
値を固定してしまうと本当の意味で正確なテストではなくなってしまう。

## Bad

“`php
$this->users = User::factory(2)->create();
$params = [
‘user_id’ => $this->users[0]->id,
‘message’ => ‘メッセージです’,
‘points’ => 10,
];
“`
## Good
Fakerなどを使うとテストが実行されるごとにランダムな値でテストしてくれる。

“`php
$this->users = User::factory(2)->create();
$params = [
‘user_id’ => $this->users[0]->id,
‘message’ => Str::random(10),
‘points’ => F

元記事を表示

【socialite】Googleログインのモックを使ったテスト

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## socialiteを使ったモック

“`socialite“`でGoogleログインを実装したときのテストでモックを使用。

“`php
class OAuthTest extends TestCase
{
use RefreshDatabase;

private function createSocialiteMock()
{
$user->shouldReceive(‘getEmail’)
->andReturn(Faker\Factory::create()->unique()->safeEmail)
->shouldReceive(‘getName’)
->andReturn(Faker\Factory::create()->name);

$provider = Mockery::mock(‘Laravel\Socialite\Contracts\Provider’);
$provider->shoul

元記事を表示

【Laravel】assertDatabaseHasで複数データを一気にテストしたい

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 状況
DBテストを書いていたら下記のエラー。
エラー文だけでググっても解決せず、少し苦労したので備忘録とする。

“`
str_ends_with(): Argument #1 ($haystack) must be of type string, array given
“`
複数のデータが入っているかを一気にテストしたかったため、
配列の配列を第2引数としていた。
直感的にこう書けるかなと思ったがだめっぽい。

“`php
$users = User::factory(2)->create();

$this->assertDatabaseHas(‘post_histories’, [
‘user_id’ => $users[0]->id,
‘hoge_type’ => ‘hoge’,
], [
‘user_id’ => $users[1]->id,
‘hoge_type’ => ‘hoge’,
]);
“`
## 解決法

DBテストではレコードごとにデータが入っているかを

元記事を表示

Laravel8 jQuery 画像動的表示

## 初めに
この記事では、画像選択時にその場で選択した画像を表示させる方法をご紹介します!

[![Image from Gyazo](https://i.gyazo.com/58c381c1bc1418ab895dd66ad810b352.gif)](https://gyazo.com/58c381c1bc1418ab895dd66ad810b352)

## 実装
今回は以下のように実装してみました。
CSSはTailwindCSSを使用してます。

・add.blade.php(画像選択のビュー)

“`php

元記事を表示

クラスとインスタンス PHP

## クラス
クラスとは設計図!
その設計図には、「変数」と「関数」が書いてある!
変数で設定を決めて、関数で何するかを決めている!

## インスタンス
クラスという設計図を元にして、実際に作っていくこと!
家を建てるイメージをすればOK!設計図を書いてから、それを元に家を建てていく!
インスタンスは複数作ってOK!設計図があれば家は複数建てられる!

### クラスとインスタンスの書き方
“`php:書き方
変数名 = 値;
$インスタンス名->関数名();
?>
“`
– `$インスタンス名 = new クラス名();` でスタートするのは決まり!
– `$インスタンス名->変数名 = 値;` でクラスで設定した変数名の値を決めている!
※変数名に `$` は書かない!
`->` はアロー演算子!変数

元記事を表示

【実験】a.phpでc.phpをrequireするだけでb.phpはc.phpをrequireなしで使えるの?

今回はPHPの仕様としてrequireを一回どこかで入れれば他のファイルはあえてrequireを使わなくてもいいのか疑問があったので調査してみました。
もう少し具体的に言うとa.phpでc.phpをrequireするだけでb.phpはc.phpをrequireなしで使えるの?という疑問を検証します。

# 実験準備
検証のためにa,b,cのファイルをWEBサーバ内の同じディレクトリに用意します。

“`php:a.php
#c.phpを読み込んだ後インスタンス化
#そのあとb.phpを読み込んで返却してもらった文字列を表示する。



“`
“`php:b.php
#a.phpから呼び出されたらc.phpに定義してあるcクラスをインスタンス化する。
#b.phpではc.phpをrequireせずとも問題なく実行できるか確認
#実行できれば成功を返却

“`

元記事を表示

PHP_クラスについて

require・include→ともに外部ファイルの読み込み時に使用

require→読み込み失敗時、処理を停止
include→読み込み失敗時、処理は継続

php
htmlspecialcharsは配列には使えない

「コマンド+f」で文字検索

php
返り値に多次元配列を使用することができるのか?

元記事を表示

【メモ】PHPのuse関連について学ぶ

phpで外部ファイルを使用する方法は2種類ある。(require,includeでrequireの方がよく見かけるし、更に言うとrequire_onceの方がよく見かける。)
使用する外部ファイルの中でどの機能を使用するかを指定できるのがuse。

# require
ファイルの読み込みに使う。
`require “ファイルのパス”;`と`require(“ファイルのパス”);`どっちでもいい。
requireで指定するのはphpファイルそのもの。
`require “lib/test2.php”;`
再読込みが行われて、変数などが再定義されると困る場合は、require_onceを使う。要するに安全だからという理由でよく使われているよ。
ファイルが読み込めないとエラーになる。

# include
ファイルの読み込みに使う。
>includeは、指定したファイルを読み込むという点では、requireと同じ。ファイルが読み込めなかった場合は、警告を出すのみで、処理は継続する。include_onceを使用すると、既に読み込まれている場合は再読込みを行わない。用途はrequire_onc

元記事を表示

PHPのコード整形と静的解析をpre-commitでコミット時に自動で実行したい

# 実現したいこと
Gitのpre-commitフックを使って、コミット時にPHPファイルのコード整形と静的解析が実行されるようにしたい。

# 問題点
commit時にpre-commitに登録したスクリプトは動き、コード整形はされるがコミットができない。
途中でエラーが発生している。

# 参考にしたサイト
https://zenn.dev/takuyanagai0213/articles/2685fe51f7afe5

https://qiita.com/Sho2010@github/items/eae44da09aa279e7e598

# 必要なパッケージ
* php-cs-fixer(コード整形)
* phpmd(静的解析)
それぞれのパッケージについては解説しません。
https://zenn.dev/takuyanagai0213/articles/2685fe51f7afe5#%E9%9D%99%E7%9A%84%E8%A7%A3%E6%9E%90%E3%83%84%E3%83%BC%E3%83%AB%E5%B0%8E%E5%85%A5
導入に関しては上記を参考にし

元記事を表示

【Laravel】都道府県プルダウン&キーワード検索機能【クエリビルダ/ローカルスコープ/ページネーション】

# 1.はじめに
大阪のLaravel初学者サウナーこと、kazumakishimoto([@kazuma_dev](https://twitter.com/kazuma_dev))です!
Laravelでクエリビルダ/ローカルスコープ/ページネーションを使用した、都道府県プルダウン&キーワード検索機能の解説です!

## 1-1.使用画像のイメージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/a0634381-2ce7-a80e-2825-01d3cf4a9e5f.png)

## 1-2.事前準備
### configフォルダ
“`php:config/pref.php
‘未選択’,
‘1’ => ‘北海道’,
‘2’ => ‘青森県’,
‘3’ => ‘岩手県’,
‘4’ => ‘宮城県’,
‘5’ => ‘秋田県’,
‘6’ => ‘山形県’,
‘7’

元記事を表示

Git ローカルのブランチをリモートリポジトリへpush(n回目(n>=2))

## push時のターミナル操作

Aという名前のローカルブランチをリモートのBブランチにpushしたい

git checkout A
git pull origin B

git add .
git commit -m “コメント”

git push origin A

——————–

※ちなみにAがadd_trainingという名前のブランチだった場合、最初の方は

git checkout add_training
git pull origin training

ローカルをadd_trainingにcheckoutしてから、リモートのtraining をpullするのが正解!
origin/training はリモートのtrainingの履歴を持ってきたローカルにあるブランチ。
git pull origin training :git fetch origin training でorigin/training へとリモートのtrainingの履歴を持ってきて、git merge origin/trainingでその履歴をローカルのadd_t

元記事を表示

【Laravel】HerokuでAWS S3画像アップロード

# 1.はじめに
大阪のLaravel初学者サウナーこと、kazumakishimoto([@kazuma_dev](https://twitter.com/kazuma_dev))です!
LaravelでAWS S3へ画像アップロードする方法について解説します!(インフラはEC2ではなくHeroku)

## 1-1.使用画像のイメージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/5c27dada-31e4-fb17-6dcd-4f8d25fb6d38.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/efeabd07-c6f2-92bc-d69e-5db8920a643a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/7b

元記事を表示

【PHP】TBを作成 ※n列で改行して余りはハイフン

# TBを作成 ※4列で改行して余りはハイフン

## パターン1

### PHP

“`PHP

【カンタン】PHPで改行を反映させる

# [改行させて登録した文章を反映させる](#-改行させて登録した文章を反映させる)

こんな感じで改行付きでコメントを登録
![スクリーンショット (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920917/dab42642-33b7-b240-adb3-dc3825480eb9.png)

こんな感じでちゃんと改行させて出力
![スクリーンショット (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920917/40d61b1b-8df5-ac4f-9610-125fe3b6d395.png)

例えばLaravelで普通に出力
これだと改行は反映されない
“`app.php

{{$user->comment}}

“`

こう書く
“`app.php

{!! nl2br($user->comment) !!}

実務4年目のWEBエンジニアが「PHP本格入門(上)」を読んで学んだこと 10選

## はじめに

私は**実務4年目のWEB系サーバーサイドエンジニア**です。

普段は**PHP**(CakePHP, Laravel)を使用し、WEBサービスの開発業務を行なっています。

そんな私がなぜ今さら「**PHP本格入門(上)**(以下 本書)」を手に取ったかというと、「自分は基礎ができていないのではないか」という漠然とした不安を持つようになったためです。

私は独学でエンジニアになったので、体系的に開発を学んだわけではありません。

PHPの基本的な構文は理解していますし、関数も使えます。

フレームワークも使えるようになりました。

次のステップとして、より技術力を高めるためにまずは基礎を勉強しなおそうと考えました。

以上、本書を手に取った経緯でした。

それでは、ここから本書を読んで学んだこと(=これまで知らなかったこと)をお伝えします。

※ この記事は「新人プログラマ応援 – みんなで新人を育てよう!」イベントの参加記事です。
https://qiita.com/official-events/3f21c92121aa125807b4

https://ww