PHP関連のことを調べてみた2023年02月17日

PHP関連のことを調べてみた2023年02月17日
目次

【未検証】PHP:declare(strict_types=1)をプロジェクト全体に適用する

# declare(strict_types=1)をプロジェクト全体に適用する

https://wonwon-eater.com/php_strict_types/

strict_types=1 を一箇所に記述して完了させたかった。
静的解析ツールとVScodeを使うことで半自動化する方法が紹介されている。

1.PHP-CS-Fixerをインストールする
2.PHP-CS-Fixer設定
3.VSCode設定

元記事を表示

PHP:改めて、型宣言も徹底する

# ネット上のコードは、そのほとんどで型宣言されていない

永遠に個人開発し続けるのなら自分さえ良ければ良いかもしれないが、そうでない限り複数のエンジニアが開発に関わる。よって、型を宣言するのが当たり前である。
ネット上のコードは圧倒的に宣言しておらず、省略しているのだろうが非常に違和感を覚える。
バグ・不具合の温床になるため、型を宣言しないコードは「動くからひとまず良い」という、PHPの仕様に依存した不完全なコードと思う。
動的型付けができる仕様の言語であろうが、それに依存することはしない。
静的型付け言語を扱う思想でコーディングする。

# 改めて、種類
array, bool, int, float, string, object(オブジェクト名)
union, mixed, null許容, void

declareしていく。

元記事を表示

PHPで比較を行う場合、基本的には厳密な比較であるトリプルイコールのタイプを使う

# 教材やネット上の情報ではダブルイコールタイプのコードが圧倒的に多い

バグの温床になるはずなのに。省略している場合と、よくわかっていない場合が混在していると思われる。
しかし、今、改めてダブルイコールタイプは真似しないことを明確にする。

# 今後は、トリプルイコールである「===」、「!===」で統一する
※例外を除いて

学習中の時から徹底することである。
仕事になってプロダクションコードを扱う場面になってから徹底しようとするようでは間違いなくミスを犯す。
もっともそのような手腕ではプロダクションコードを任されることはないだろうが、何事にも隙間というものはある。
いかに安全なコーディングをするか?非常に重要。バクが発生し、最悪の場合最終的に発注者が被害を被る。

元記事を表示

PHP:型:「コールバック」とは「関数を引数で取るための擬似的な型」

# コールバックという型とは?

関数を引数で取るための擬似的な型で、呼び出し可能な関数かをチェックする。
引数として受け取れる関数「コールバック関数」

元記事を表示

PHP:型:「リソース」:外部リソースえのリファレンスを保持しているデータ型

# リソースとは?

外部リソースえのリファレンスを保持しているデータ型。

“`
$fileOpen = fopen(“data.txt”, “W”); // 外部ファイルを書き込む
echo getttype($fileOpen); // resource
fclose($fileOpen); // ファイルを閉じる

元記事を表示

【EC-CUBE4】symfony 複合検索のクエリビルダー

# 初めに
私現在、EC-CUBEのカスタマイズなどをしております。
今回は、案件の中で複合検索を作る機会があり少し複雑な処理を書いたのでメモ程度に残します。

## 状況
それぞれのカテゴリIDにて検索することはできるものの、

赤色、3000円以下で絞るなど複合検索ができないので、実装する。

知らない人のために、EC-CUBEのカテゴリの構造はこのようになっています。
“`:カテゴリの構造
ID:1 色
ID:4 赤
ID:5 青

ID:2 用途
ID:6 お出かけ

ID:3 予算
ID:7 3000円以下
ID:8 3000円~5000円
ID:9 5000円以上
“`

#### 要件
・それぞれの大きなカテゴリ別ではorwhere検索(3000円以下と5000円以上選ぶとどちらかが当てはまればヒット)
・別のカテゴリではandwhere検索(赤色の3000円以下で検索した場合どちらも満たしているもののみヒット)

## 実装の内容
説明するよりコード見た方が早いと思うので載せます
“`php
class

元記事を表示

Docker環境のPHPでBootstrapをインストールする手順

# Warpで直接コマンドでインストールする
Bootstrap本家サイトでインストールするコマンドをコピーしてDockerコードの後にコマンドを追加して実施する。

https://getbootstrap.jp/docs/5.0/getting-started/download/
※URLはサイトの構成見直しで変更される可能性がある。要は「ダウンロード」のリンク先。

色んな環境に合わせたインストール方法が紹介されている。

「Composer」の欄を見つける。
「Composer を使って Bootstrap の Sass と JavaScript をインストールできます。」とあり、コマンドが掲載されている。バージョンがアップデートされればバージョン名が変わっていく。
ちなみに今日は以下。
注意点!!:以下のコマンドをそのまま使ってはだめ。

“`
composer require twbs/bootstrap:5.0.2
“`

Dockerなので冒頭の記述を行った後で上記のコードを追記してコマンド実施する。
“`
docker-compose exec app comp

元記事を表示

Fedora へ引っ越しします。(Bludit,nginx,php,selinux)

セキュアブートがややこしくて、セットアップモードうんたらが、イマイチわかりません。
セキュアブート&SELinux対応を、一からするのが疲れ果てそうだったので、素直に、そういうことを気にしないでいい、ディストリビューションに移りました。
ブートローダーで対応しているのは、UbuntuやFedoraは対応しているみたいです。(他にもOpenSUSEなども?)
セキュリティ機構の標準が、UbuntuがAppArmorで、FedoraはSELinuxが有効になっているみたいです。

試してみたら、あのGNOMEがなんか軽い気がする。
KDEもメニューの応答性が、、、マシンが弱いせいだと思っていたが、なぜかいい感じです。
###### ↑きっとインストール直後の錯覚によるものです。

ハードディスクもデータが少ないので当然、軽いです。
でも何か他に原因が、と突き詰めたくなりましたが、素直にラップトップはFedoraに住み替えることにしました。

その上で、個人的なサーバーもFedoraにしてみようというところで、移行が簡単にできるか確認しました。
サーバでは、BluditというCMSを使ってい

元記事を表示

PHP:バリデーションエラー時にformで入力した値を消さないようにする

# input textなどの場合value値を使う

## テキスト入力欄などのvalue値は「初期入力値」を表す

“`
>

“`

元記事を表示

PHP:外部ファイルを読み込む方法が二種類(requireとinclude)あり、その違い

# 読み込みが失敗した時のその後の挙動に差があるだけ
処理を継続するか、終了するか、の違い。

# requireは処理を中断する

基本的に、関数などの重要な処理を読み込む時に使う。

# includeは処理を続ける

基本的にはHTMLやテキストの読み込みはinclude。
HTMLはシステム的な重症な弊害はないため。
疑問:ではHTMLもrequreでいいじゃないかと思うが、それも何か理由があるのだろう。

# ※ require_onceとinclude_once は言わずもがな。
一度しかファイルを読み込まない時に使う。

# 外部ファイルがなければ話にならない場合はrequire

例えば、外部ファイルがあるか無いかわからないけど、あれば読み込みたい場合などにはincludeを使います。

一方、その外部ファイルが無ければ話にならない場合などにrequireを使っておくと、万が一無かった場合に処理を終了させることができます。

元記事を表示

WindowsでSymfony開発環境の作成 with Scoop

## 環境
Windows 10 Pro
Version 22H2
PowerShell 5.1

## Scoopとは
ScoopとはWindows用のパッケージ管理ツールです。
MacのbrewやUbuntuのaptみたいなもの?
公式サイト

https://scoop.sh/

## Scoopの有効化
有効化するために、セキュリティーポリシーを変更する必要があります。
公式サイトからのコピペ
“`
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex
“`
## パッケージのインストール
### 過去バージョンについて
Symfonyを利用するために、いくつかのパッケージをダウンロードする。
今回はあえてPHP7.3をインストールする。
しかし、searchしてもPHP8.2しかありません。
> $ scoop search php
Results from local buckets…
Name Version Source Binaries
\—- ——-

元記事を表示

解決不能:Dockerでdocker-compose upすると、[Warning] Setting lower_case_table_names=2・・・の警告が出る。どの選択肢に変更しても警告が消えない

# エラー内容
docker-compose up すると以下が最下部に出力される。

“`
myArea-db-1 | 230216 6:26:12 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
“`

# Docker本家で検索しても記法は出てこず、出てくるのは的のずれたforumの質問くらい

# その他ネット検索、ChatGPTで調べるも、どれもほぼ同じことを書いてある

# 要は、大文字小文字の判定についてdocker/db/my.cnf で2と書けということだが、Warningは消えない

このエラーメッセージは、MySQLサーバーの設定である lower_case_table_names が 2 に設定されているために発生しています。この設定は、テーブル名が大文字と小文字を区別しないかどうかを決定するものです。
lower_case_table_names の設定値には以下の3つがあります。

0: テー

元記事を表示

連想配列のソート(PHP)

**連想配列**のソートに関するサンプルプログラムを実装しました

“`PHP
$colors = [“red” => “赤”,”blue” => “青”,”yellow” => “黄”];

// 要素をキーで昇順に並び替える
ksort($colors);

foreach($colors as $key => $value){
echo “

{$key}は日本語で{$value}です”;
echo “
“;
}

// 要素をキーで降順に並び替える
krsort($colors);

foreach($colors as $key => $value){
echo “

{$key}は日本語で{$value}です”;
echo “
“;
}
“`

Keyを昇順に並べるには***ksort***関数、降順に並べる場合は***krsort***関数を使います。

元記事を表示

MAMP Laravel MySQLで簡易SNS作成

### 背景・前書き

Laravelもphpも触ったことのない超初心者で、Laravelの仕様(仕組みやライフサイクルなど)を全く理解しておらず、チュートリアルすらやったことがないですが、実際に何かを作ることでなんとなくの雰囲気を把握するために挑戦しました。

基本的に以下のサイトを参考に実装いたしました。こちらの記事をベースに、Laravel9、また自分の環境との差分を備忘録的に書いています。

https://qiita.com/n_oshiumi/items/8993ab268209d19f052e

また、Laravel8.x以降では仕様が変更している部分が多く、時系列的に遭遇したエラーを記載していますので、一度本記事を全て読んでから、私と同じ轍を踏まないようにすることをおすすめします。

Javaなどを先に学んでいる方は理解しやすいと思いますが、MVCモデルとなっているため、同様にModel,ControllerなどやView(画面部分)を作成する流れになります。
ただJavaのプロジェクトとは異なり、ルーティングを行い、URLの飛び先を指定します。

https://co

元記事を表示

MAMPを利用してLaravelとPHPの環境を構築したい

## 前書き
表題を実現したく、実際に遭遇したエラーなどを時系列的に書きました。

環境が構築できたら、下記の簡易SNSシステムの作成を行なっていますので、興味のある方はそちらもご参照ください。

https://qiita.com/pocky_tabemasu/items/50490705d2424236c718

## 環境

本記事投稿時点(2023/2)での最新バージョンで構築
・Mac M1
・Laravel 9
・php 8.2.0
・Composer version 2.5.1
・Workbench version 8.0.19 (ターミナルでの操作もできるためなくてもいいです。これは最新ではありません※後述)
・エディタ : Visual Studio Code

## 手順
### MAMP公式サイトから手順通りインストール
https://www.mamp.info/en/mamp/mac/

### Composerインストール
今回は2.5.1をインストール
![スクリーンショット 2023-02-03 15.34.34.png](https://qiita-

元記事を表示

php artisan serveしたのに、エラー出てしまいました。composer installもエラーだった。

ある日、PHPのLaravel入門の本(通称青本)をもとに環境構築しているときのことでした。
`php artisan serve`を叩いたところ、こんなエラーメッセージが、、
※DeskTopに`laravelapp`という名前でプロジェクト作成しています。
“`
PHP Warning: require(C:\Users\ユーザー名\Desktop\laravelapp/vendor/autoload.php): Failed to open stream: No such file or directory in C:\Users\ユーザー名\Desktop\laravelapp\artisan on line 18
PHP Fatal error: Uncaught Error: Failed opening required ‘C:\Users\ユーザー名\Desktop\laravelapp/vendor/autoload.php’ (include_path=’.;C:\php\pear’) in C:\Users\ユーザー名\Desktop\laravelapp

元記事を表示

Laravel モデルwhere+カラム名メソッドの動きを理解しよう!

# はじめに
こんにちは!!
ミャンマー人エンジニアのピェッピョーアウンです。
私はミャンマーの大学を卒業して、新卒で日本の企業に就職し、日本での社会人として、5年目が終わり、6年目を向かいました。
エンジニアとして、LaravelとCodeIgniterといったPHP言語を中心にしたWeb開発が多かったのですがこれまでの日々の経験や勉強になったことなど投稿していこうと思っています。
今回はLaravel モデルでのwhere+カラム名メソッドについて、勉強になったことをシェアさせていただければと思います。

# where+カラム名メソッドとは

laravelのモデルでwhere+データベースのカラム名のメソッドを使ったことありませんか?
例えば、`User`モデルの場合、データベースの`users`テーブルには`name`と`email`カラムがあるとしたら、`whereName`、`whereEmail`のようなメソッドが定義されてなくても使えるようになっています。
以下、PHPDocで作成された、Userモデルを見てみましょう。

“` php:User.php

元記事を表示

Lappinna技術部始動!

# 初めに!
皆さん始めまして!Lapinna技術部のしゃちょ~(仮)です!
このアカウントについての説明をさせていただきます!(やるとは言っていない)

![1_hokkaidou.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3163792/9380c14f-17fd-3110-bf6c-46e3f7d62c65.png)

※上記イラストに深い意味はありません。よろしくお願いいたします。

## 記事概要
このアカウントは、初心者向けの記事を投稿するアカウントとなっております。
現職でIT企業に勤めているプロのエンジニアが中心となって記事を上げていく予定となっております!(頑張ってね!

# 投稿予定
## AI関係(機械学習・深層学習/ニューラルネットワーク)
・AIに必要な画像処理技術をまとめてみた(仮)

## WEB開発(PHP/Laravel・HTML・CSS・JS)
・プロのエンジニアが初心者のためのWEBページ作成指導書作ってみた(仮)

## ゲーム関係
・Unityでインベーダー

元記事を表示

Docker環境でPHPのエラーログを出力する

# 事前準備としてコンテナ名を確認

docker ps

# ログを確認したい時

docker logs -f <コンテナ名>

# アクセスログを確認したい時

docker logs <コンテナ名> -f 2>/dev/null
※ 2 はエラーという意味で、/dev/null は 破棄する という意味。エラー出力を破棄する、という意味になる。

# エラーログを確認したい時

docker logs <コンテナ名> -f 1>dev/null
※ 1 は標準出力のことになり、この場合は 標準出力を破棄する、という意味になる。

注意: 上記では dockerコマンドを使用しているが、docker-composeコマンドでもログを取れる。
その場合は docker ps などとコンテナを調べずにログが取れるので簡単。
しかしダメ。採用していない。
理由は、アクセスログとエラーログが混ざって出力されるため、切り分けしづらいから。
それでも良い場合だけ使う。
でなければ、ログだけ見たいとかならば使わない。

dockerの場合、正常系とエラー系の二種類しか分離でいない。

元記事を表示

PHPでリダイレクトする

# 生のHTTPヘッダを送信する

$header:ヘッダ文字列

“`
header($header)
“`

リダイレクトするにh Location: ヘッダを付与する。
当然ながら、リダイレクトさせると、その後にコードを記述していても実行されない。
しかしこれまた当然ながら、条件文ならば、条件に合わずリダイレクトされなければその後のコードは実行される。

“`
header(“Location: https://www.mysite.com/”);
“`

元記事を表示

OTHERカテゴリの最新記事