PHP関連のことを調べてみた

PHP関連のことを調べてみた

【CakePHP5】PHPStanを使う

# はじめに

こんにちは、エンジニアのkeitaMaxです。

前回DockerでCakePHPの環境を整えて、最初の画面表示まで行いました。

https://qiita.com/keitaMax/items/6152aa9fff66bee4e887

今回はPHPStanを使用できるようにしたいと思います。

# インストール

以下のコマンドでインストールします。

“`
composer require –dev phpstan/phpstan
“`

# 実行

“`
docker compose exec app bash
“`

上のコマンドでコンテナの中に入った後、以下コマンドでPHPStanを実行することができます。

“`
./vendor/bin/phpstan analyse
“`

実行すると以下のように解析をしてくれます。

“`
root@4ab649b0155e:/app# ./vendor/bin/phpstan analyse
Note: Using configuration file /app/phpstan.neon.
⚠️

元記事を表示

【PHP】boolean型聖書

はじめに

こんにちは、まりあ様です^^

PHP触ってて衝撃的だったことをメモがてら、残します。

echoでのboolean型出力

例えば、期待値としてtrue、falseが返却される以下のソースコードがあるとします。

“`
$testTrue = true;
$testFalse = false;

echo $testTrue; // 想定している返却値は、true
echo $testFalse; // 想定している返却値は、false
“`

これを実際に出力すると、、、、

“`
1 // true
“” // false
“`

となるんです。。。。
もうこれ、JavaScriptとかかじったくらいで、console.logでとりあえずなんでも中身見る人なので、衝撃でした。
なんで、1とか空文字で返ってきてんの?boolean型のはずなのに?とか混乱しちゃいましたw

var_dumpでの出力

var_dumpで出力するとどうなるか?

元記事を表示

Laravelでの論理削除に関するガイド

## 論理削除の概念
論理削除は、データベースのレコードを物理的に削除する代わりに、削除されたことを示すフラグ(通常は`deleted_at`カラム)を設定する方法です
コレにより、データは実際にはデータベースに残り続けますが、アプリケーション上では削除されたものとして扱われます

## メリット

1. データの復元が容易
– 誤って削除したデータを復元するのが簡単です
1. 履歴管理
– 削除の履歴を追跡でき、監査やログ管理が容易になります
1. 参照整合性の維持
– 削除されたレコードを参照しようとしても有効なデータとして参照できる
– データを完全に削除(物理削除)した場合は参照できなくなってしまいます

## デメリット

1. ストレージ増加
– 完全にデータを削除しないため、ストレージが増加します
1. クエリの複雑化
– 削除されたレコードを無視するための条件を追加する必要があります
1. パフォーマンスの低下
– 大量の論理削除データがあると、パフォーマンスが低下する可能性があります

## 論理削除を使う場

元記事を表示

統一プロジェクト開発環境:ServBayで十分

### 紹介

現在の開発環境は完全に統一されておらず、細部にいくつかの違いがあります。これらは90%の作業には影響しないものの、環境やバージョンの不一致により時々問題を引き起こすことがあります。

**1. 依存関係の問題**
– 異なる開発環境では、PHP、Composer、Node.jsなどのツールの異なるバージョンがインストールされる可能性があり、依存関係の競合や互換性の問題を引き起こすことがあります。
– ライブラリやフレームワークの異なるバージョンが、異なる環境でコードの動作を不一致にさせることがあります。

**2. 設定の違い**
– 環境変数、PHP設定ファイル(例:php.ini)、Apache/Nginx設定ファイルなどが異なる場合、ある環境では正常に動作するコードが別の環境では動作しないことがあります。
– データベース設定、キャッシュ設定なども環境ごとに異なり、アプリケーションのパフォーマンスや安定性に影響を与えることがあります。

**3. オペレーティングシステムの違い**
– すべての開発者がMacを使用しているとしても、macOSのバージョ

元記事を表示

PHPフレームワークFlowで楽観ロックを実装する

# 初めに
PHPフレームワークFlowで楽観ロックを実装しようとした際、FW側で何かメソッドなど用意しているのかどうか気になりました。今回はその結果をアウトプットします。

# Doctrineの楽観ロック実装方法
PHPフレームワークFlowはDoctrineというORMを標準で利用しています。
Doctrineには楽観ロックを行うためのメソッドが最初から用意されています。

https://www.doctrine-project.org/projects/doctrine-orm/en/3.2/reference/transactions-and-concurrency.html#optimistic-locking

一部サンプルソースを抜き出してきました。
それぞれ、モデルクラスと楽観ロックを利用するクラスです。
“`php
class User
{
// …
#[Version, Column(type: ‘datetime’)]
private DateTime $version;
// …
}
“`

“`php
use

元記事を表示

Simple WordPress Membershipのメッセージ変更

# 概要
Simple WordPress Membershipを使って会員機能を実装する際に
ログインが必要なページに表示されるメッセージの翻訳が
イマイチだったので今回変更しました。

# 実際のコード
“`functions.php
add_filter(‘swpm_not_logged_in_post_msg’, ‘custom_not_login’);
function custom_not_login($text){
// ログインページのURLを取得
$login_url = SwpmSettings::get_instance()->get_value(‘login-page-url’);
// 新規登録ページのURLを取得
$registration_url = SwpmSettings::get_instance()->get_value(‘registration-page-url’);

// カスタムメッセージを返す
return ‘

本コンテンツは会員専用になります。
‘ . ‘既に会員の方は# MySQL入門#2!!MySQLの基礎!!はじめてのSQL文【リレーショナルデータベース / PHPによるWebアプリケーション開発】

皆さんこんにちは、KoenigWolfです。今回はMySQL入門の続きをお届けします。前回はMySQLが公式サイトで配布しているExampleデータベースから「ワールドデータベース」というデータをインポートし、MySQLの基本的な操作について学びました。今回は、そのワールドデータベースを使って実際にSQL文を操作してみたいと思います。

## データの操作:基本のCRUD

まず、データ操作の基本としてCRUD(Create, Read, Update, Delete)の4つの操作があります。これらはそれぞれデータの作成、読み取り、更新、削除を意味します。これらの操作ができるようになれば、MySQLの入門としては十分です。

リレーショナルデータベースの特徴として、データの強い整合性と柔軟な検索機能があります。この2つの特徴を理解することで、MySQLの強みを活かしたデータ操作が可能になります。

## データの強い整合性

リレーショナルデータベースは、データの整合性を強く保つ機能を持っています。例えば、家計簿で今月の収支が合わないといった不整合が現実世界ではよくありますが、リレーシ

元記事を表示

WordPress標準制作フロー2024

## 現在のWordPress標準制作フロー

[5年前に記載したこちらの記事](https://qiita.com/koji-yamauchi/items/394c8e111dcd14a5d311)は、もう昨今の作業環境には適合しなくなりました。
2024年現在での弊社の標準的な制作フローをご紹介します。

[WordPressを扱うエンジニアに対する質問事項](https://qiita.com/koji-yamauchi/items/31edcfe443285b6d7194)で記載した回答例と一部重複しますが、より詳細に案内したいと思います。

## 前提事項

5年前の記載内容と前提事項は同様です。

* Web制作会社などでいちからサイトを制作することを想定
汎用テーマなどを使って簡易に構築するとかではなく、ガッツリとそのサイト専用のテーマを作成する
* それぞれのツールのインストール方法などは記載しない
Qiita内で丁寧に手順を記載している記事があるので検索してみてください

## ローカル開発環境

WordPressでサイト制作を決めた場合、携わるエンジニアは

元記事を表示

Laravelベストプラクティスで実際の開発で使ってる箇所まとめ

## はじめに
Laravelベストプラクティスを改めて読んでどのプロジェクトでも認識すべきルールを軸にまとめてみました
逆に「プロジェクトによって運用方法が変わる」ような箇所は割愛した箇所は後述でリストにしてみました

## Laravelベストプラクティスの目的
Laravelは強力で使いやすいPHPフレームワークですが、
ベストプラクティスに従うことで、その真価を最大限に引き出すことができます。
このガイドでは、Laravelのコーディングスタイルや設計パターンにおけるベストプラクティスを紹介し、コードの品質向上、保守性の向上、そして開発効率の向上を目指します。

## 単一の原則
クラスとメソッドは1つの責任だけを持つべきです。

Bad:
“`php
public function getFullNameAttribute(): string
{
if (auth()->user() && auth()->user()->hasRole(‘client’) && auth()->user()->isVerified()) {
return ‘Mr.

元記事を表示

Laravel の Eloquent で bulk update するときに updated_at を更新しない方法

## 結論
`users` テーブルのモデル `User` に対し、 `status = 0` の行の `email` を `null` に更新する時の例。

“`php
$query = User::where(‘status’, ‘=’, 0); // 対象の検索条件
$query->getModel()->timestamps = false; // これにより updated_at の自動更新をとめる
$query->update([‘email’ => null]); // 更新
“`

バッチなどで一括更新したいが、更新日を変更したくない時に使う。

## 別解
### Eloquent ではなく Query\Builder を使う場合
updated_at は自動更新されない。

“`php
DB::table(‘users’)
->where(‘status’, ‘=’, 0)
->update([‘email’ => null]);
“`

### 対象を全部取得してループ
効率が悪いので非推奨。
“`php
$users = User::w

元記事を表示

【PHP】西暦から和暦・和暦から西暦を算出する

[西暦から干支・干支から西暦を算出する](https://qiita.com/Kokusui/items/79da562e4e979aea1825 “西暦から干支・干支から西暦を算出する”)に続き暦ネタ。
#### 西暦から和暦を算出
“`seireki2wareki.php
function seireki2wareki(string $datestr = NULL) {
//datestrで与えられた年月日(の属する暦年)の和暦年を返す ただし1968年~2100年の範囲
if (!$datestr) {$datestr = date(“Y-m-d”);} //datestrが空欄の場合は今日の和暦
else {
$datestr = mb_convert_kana($datestr, ‘n’); //全角数字は半角に直す
if (is_numeric($datestr = str_replace(‘年’, ”, $datestr))) {
//datestr(「年」がついていたら取る)が数値文字列の場合(=年のみで月日が入ってない場合)
if (

元記事を表示

あまり知られていないLaravelのコレクションメソッド #1: macro

# 背景

Laravelのコレクション、使いこなしていますか?

以下の記事を先程読んで面白いと思いました。

「あなたは使ったことがないLaravelのコレクションメソッド10選」

https://backpackforlaravel.com/articles/tips-and-tricks/top-10-collection-methods-you-have-never-used

ただし、英語で書かれていますし、各メソッドの説明が不十分に感じました。
ということで、以上の記事を翻訳する上で、それぞれのメソッドの活用方法を説明していきたいです!
今回はCollectionのmacroメソッドを解説します!

# macro: 全てのコレクションにカスタムメソッドを追加する

### 概要

スタティックメソッドになり、以下のように呼び出すことができます。

“`php
Collection::macro(‘カスタムメソッド’, function ($arg1, $arg2) {
// カスタムメソッド処理
});
“`

定義したカスタムメソッドはどのコレクションで

元記事を表示

PHPを使ってみよう:動的ウェブ開発の第一歩

# PHPの基礎

こんにちは、皆さん!今日は、PHPの基礎について一緒に学んでみましょう!PHPは、ウェブ開発でよく使われるサーバーサイドのプログラミング言語です。内定先の企業でもこの言語を使っていくので今回はPHPの基礎についてまとめてみようと思います。

## PHPって何?

まず最初に、PHPって何か知っていますか?PHPは「Hypertext Preprocessor」の略で、動的なウェブページを作成するための言語です。例えば、ログインフォームや掲示板、ショッピングカートなど、ユーザーが操作するインタラクティブなウェブページを作るのに使われます。

## PHPの基本構文

PHPのコードは、通常はHTMLの中に埋め込まれます。PHPのコードブロックは、`` というタグで囲まれます。さっそく簡単な例を見てみましょう。

“`php




PHPの基本

元記事を表示

OSSに初めてコントリビュートした話

## なぜコントリビュートしたのか?
普段色々なOSSにお世話になっているので、コントリビュートで貢献したい!と考え始めたことがきっかけです。

## 今回コントリビュートしたOSS
openEMRという電子カルテの管理などの医療業務系のOSSです。
公式サイト:https://www.open-emr.org/

## コントリビュートの流れ
ざっくりこんな感じです。
OSSごとに個別のルール・手順などがあるので、行ってみる場合はリポジトリのREADMEやInsightsなどのコントリビュート関連のドキュメントをまず確認してください。

・やりたいIssueを取る
・リポジトリをFork
・ブランチを切る
・対応してPR作成
・レビュー
・マージ(レビューでフィードバックがあれば対応)

## コントリビュートの概要
今回コントリビュートで修正したのは[こちらのIssue]()で、新しいユーザーを追加する際に、emailログイン項目で入力した値が反映されない、というものでした。
これくらいの内容ならできるかも、と思ったので他のIssueの様子を見つつ、やってみてもいいか聞きました。

元記事を表示

MAMPで500エラーが出た時のエラーログを確認する方法

MAMPを使って、PHPで作られたサイトをローカルで確認していた際に、500エラーが表示されました。
どこを書き間違えたんだろう….と思っていたところ、エラーログが見えればわかる!と思い、ファイルを探しました。
私の環境はMac OS Venturaです。

## MAMPのフォルダを確認する
アプリケーション内にあるMAMPフォルダから、logsフォルダを確認すると、php_error.logの名前があります。
“`
アプリケーション > MAMP > logs > php_error.log
“`

中身を確認すると、ダダーっといつの間にかこんなにエラーが出てたんですね。びっくり。

## おわり
普段MAMPを使っておらず、この案件のためだけに入れたので最初はわからず右往左往してしまいました。

元記事を表示

デザインパターン 〜ストラテジパターン〜

## ストラテジーパターン
アルゴリズムをカプセル化し、クライアントに影響を与えずにアルゴリズムを切り替える。

例)
レストランの支払い。クレジットカード、現金、PayPalなどの複数の支払い方法を提供し、
顧客が選んだ方法に応じて支払いを処理する。
メリットは以下。

– 柔軟性:顧客が選んだ支払い方法に応じて、支払い処理を切り替えることができる
– 拡張性:新しい支払い方法を追加する際に。既存のコードに影響を与えずに追加できる

“`PHP
// 決済実行インターフェース
interface PaymentStrategy {
public function pay(int $amount);
}

// 決済方法クラス
class CreditCardPayment implements PaymentStrategy {
public function pay(int $amount) {
echo “{$amount}円をクレジット決済します。”;
}
}

class PayPayPayment implements Paymen

元記事を表示

デザインパターン 〜ファクトリパターン〜

## ファクトリパターン
オブジェクトの生成をカプセル化して、
サブクラスがインスタンスを生成するためのインターフェースを提供する。

例)
自動車工場で異なるモデルの車を作って、顧客の注文に応じて最適な車を組み立てる。
以下のメリットがある。
– 柔軟性:顧客の要求に応じて、異なるモデルの車を生成できる
– コードの整理:オブジェクト生成ロジックを一箇所にまとめることで、コードのメンテナンスが容易になる

“`PHP
// 共通動作である運転をインターフェースとして、各車種のタイプでクラスを定義。(= ポリモーフィズム)
interface Car {
public function drive();
}

class Sedan implements Car {
public function drive() {
echo ‘セダンを運転します’;
}
}

class SUV implements Car {
public function drive() {
echo ‘SUVを運転します’;
}
}

元記事を表示

デザインパターン 〜シングルトンパターン〜

## シングルトンパターン
クラスのインスタンスが1つだけということを保証し、
そのインスタンスへグローバルなアクセスポイントを提供する。
汎用的に使われるヘルパー関数、ユーティリティ関数などに使われる。

例)
オフィスに1台だけコーヒーメーカーがあるとする。これにより以下のメリットがある。
– 一貫性
– コーヒーメーカーが一つしかないため、どこからだれが作っても同じコーヒーが作れる
– リソース節約(保守性)
– コーヒーメーカーを1台だけにすることで、会社のコストやスペースの節約になる
– グローバルアクセス
– オフィスのどこからでも、そこに行けばコーヒーメーカを使えるため便利

### コードを書いてみる
“`PHP
class CoffeeMaker {
// 唯一のインスタンスを保持する静的プロパティ
private static $instance;

// プライベートコンストラクタで外部からのインスタンス化を防ぐ。
private function __construct() {
/

元記事を表示

[ 備忘録 ] Docker でPHP環境を作る(PHP8,Nginx,MySQL)

## 目次
– [1 構築後のイメージ](#1-前提条件)
– [2 前提条件](#2-前提条件)
– [3 ディレクトリ構造](#3-ディレクトリ構造)
– [4 環境構築(実際の作業)](#4-環境構築)
– [5 コンテナの止め方・再起動](#5-コンテナの止め方)
– [6 各ファイルの説明](#6-各ファイルの説明)
– [7 エラー時の対処法(未完成)](#7-エラー時の対処法)
## 1. 構築後のイメージ
– localhost:8000/ でindex.php が表示される
– composer インストール済み
– データベース(MySQL)に接続できる

## 2. 前提条件
– **docker エンジンが実行済みであること**
docker DesktopでDockerエンジンを起動するのがいちばん簡単な方法ですが、企業での利用では有償になるなどDocker Desktop を使用しないでDockerエンジンを使用する方法が知りたい場合は以下の方で解説しています。
 ・~~[Docker Desktop を使わずにDocker を使う!]()~~
– **l

元記事を表示

LaravelでSlack通知をする世界で一番簡単な方法

LaravelでSlack通知するためにFacedeを設定したり色々ややこしいことをしている記事があるが、Laravelには標準でSlack通知できる機能が備わっています。便利。
# 手順
1 . Slackの Webhook URLを発行
https://api.slack.com/apps

2 . `.env` に以下を追加
“`vim:.env
LOG_SLACK_WEBHOOK_URL=”1.で発行したURL”
LOG_SLACK_USERNAME=”Hello Slack”
LOG_LEVEL=”debug”
LOG_STACK=single,slack
“`

![aaa](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/374872/c408d098-a2cd-d21e-ad22-8650fb8edc2a.png)

3 . `php artisan config:clear` で .env の設定更新
4 . `src/config/slack.php` を作成し、以下のように追加
“`p

元記事を表示

OTHERカテゴリの最新記事