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

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

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

元記事を表示

PHPの数値判定を色々な関数で試した結果 (一覧表あり)

#### PHPで入力値や計算値が数値かどうかを判定するときにどの関数を使ったらいいの?
##### 時間がないひと向けの結論:
__A1__: 文字列の’0’が数値とされてよい場合⇒ “`is_numeric()“`でOK。
“`php
if (is_numeric($a)) {…}
//$aが数値(っぽい値、例えば$a=’0′)のときは処理する
“`
__A2__: 文字列の’0’を数値にしてほしくない場合⇒ “`is_int()“`と“`is_float()“`の論理和を使う。
“`php
if (is_int($a) || is_float($a)) {…}
//$aが厳密に数値であるときのみ処理する。$a=’0’のときは処理しない
“`

#### 各種is_…関数の挙動の比較
PHPで入力値や計算値が数値かどうかを判断するときにどの関数を使ったらいいの? と思って調べたのだが、明確な答えが見つからなかったので自分でやってみた。結果、想像していた通りになったりならなかったりして面白かったので紹介したい。エントリーメンバーはこちら。

1. `

元記事を表示

PSR-12まとめ:PHPコーディングスタイルの標準化

:::note

AI要約

– PSR-12はPHPのコーディングスタイルを標準化し、コードの可読性と保守性を向上させるためのガイドラインです
– PHPファイルはUnixスタイルの改行(LF)を使用し、空白行ではなく有効なコードやコメントで終了する必要があります
– キーワードは小文字で記述し、引数や戻り値には一貫して型宣言を使用します
– クラスやメソッドの左中括弧 { は次の行に置き、クラスプロパティにはアクセス修飾子(デフォルトはprivate)を明示します。
– 演算子、条件演算子、クロージャーなどの書き方には特定のスタイルルールがあり、コード例を参照して適切に記述します

:::
## 目的
開発メンバーが書いたコードを読む際の脳内負荷を減らすこと
一定のコーディング規則があれば、コードの読みやすさが向上します
そんなコーディング規則の1つでもあるPSR-12を超ざっくりと説明していきます

## 諸注意
生成AIで要約をしていますので原文の見出しとは異なったまとめになっております。
なお、主観的な

元記事を表示

【備忘録】PHPUnitのよく使うAssertions一覧

# はじめに

こんにちは、エンジニアのkeitaMaxです。
PHPUnitのAssertionsについて自分なりにまとめてみました。

# Boolean

### `assertTrue()`
中身がtrueであることを確認するものです。
“`php
//ok
assertTrue(true)
//ng
assertTrue(false)
“`

### `assertFalse()`
中身がfalseであることを確認するものです。
“`php
//ok
assertTrue(true)
//ng
assertTrue(false)
“`
# 2つの値が正しいことの確認

### `assertSame()`
`===`と同じように第一引数と第二引数が同じであることを確認します。
“`php
//ok
assertSame(“10″,”10”)
//ng
assertSame(“10”,10)
//ng
assertSame(“10″,”30”)
“`

### `assertEquals()`
`==`と同じように第一引数と第二引数が同じであることを確認します。
`

元記事を表示

MacBookの潜在能力を解き放て:驚くべき6つのmacOSアプリ

さて、本題に入りましょう。あなたのMacBookはスタイリッシュなマシンですが、適切なアプリがなければ、ガレージに駐車されたフェラーリのようなものです。テクノロジー中毒者であり、認定されたApple信者として、私は常にMacをパワフルにするアプリを探し求めています。では、私が見つけた、MacBookのゲームを本当にレベルアップさせたアンダーザレーダーなアプリを紹介します。

### [ServBay — 開発環境の万能管理者](https://www.servbay.com/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782463/0ea4b994-9e38-431c-c42e-b68209d5eb88.png)

ウェブ開発者として、私の主な焦点はコーディングにありますが、[デプロイメント環境](https://www.servbay.com/)の処理には多くの時間がかかります。特に初心者にとっては、一度で成功することは稀です。ここでServBayが登場し、ユーザーフレンドリ

元記事を表示

remi で入る PHP アップグレード

# 自己紹介

乙井です。はじめまして。(仙水忍風)
Gakken LEAPという EdTech の会社でよろずやエンジニアをやっております。
本稿では remi リポジトリで入れる PHP アップグレードを紹介します。

# 目次

– [自己紹介](#自己紹介)
– [目次](#目次)
– [前書き](#前書き)
– [前提条件](#前提条件)
– [コマンド羅列(忙しい人向け)](#コマンド羅列忙しい人向け)
– [コマンド補足](#コマンド補足)
– [説明付き手順](#説明付き手順)
– [トラブルシューティング](#トラブルシューティング)
– [違うリポジトリで入ってしまった場合](#違うリポジトリで入ってしまった場合)
– [既存モジュールが残っている場合](#既存モジュールが残っている場合)
– [`php -v` で古い PHP バージョンが表示されてしまう場合](#php–v-で古い-php-バージョンが表示されてしまう場合)
– [モジュールの導入が失敗する場合](#モジュールの導入が失敗する場合)

元記事を表示

OTHERカテゴリの最新記事