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

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

PHP nullable な型、union 型について

# 本記事を書こうと思った動機
本記事では、
* **nullable な型**(データ型の前に **`?`** を付与)
* **union 型**(**`|`** で複数のデータ型を結合)

について紹介する。

ある時、有名なライブラリのコードを解析していて、上記 2 つを使用した部分をよく見かけた。私のように「ライブラリを提供する側ではなく、使用する側」の立場が多い人にとっては、使う場面が少なく新鮮なコードに見えた。**この機会を逃したら、おそらく勉強しないだろうと思った**ので、その意味をはっきりさせておきたかった。

# nullable な型
引数や戻り値の型宣言で、nullable 指定ができる。PHP マニュアルによると、
> PHP 7.0.x から PHP 7.1.x への移行

時の新機能のようだ。**データ型の前にクエスチョンマーク (`?`) を付与することで、指定したデータ型に加え、null も渡せるようになる**。下記に、引数に (`?`) を付与しない場合、付与する場合、戻り値に (`?`) を付与する場合を示す。
### 引数に (`?`) を付与し

元記事を表示

symfonyでvalidationのメッセージを日本語化したメモ

https://symfony.com/doc/current/validation/translations.html

基本は ↑ こちらに沿って進めればOK

https://github.com/symfony/validator/tree/7.0/Resources/translations

symfony/translation で配置されるファイルは ↑ こちら

https://symfony.com/doc/current/translation.html#translation-resource-file-names-and-locations

↑ こちらにあるとおり、 validators.ja.xlf を translations/ ディレクトリにコピーします

ただ、各リンクのとおりに進めても、invalidのメッセージは英語のままでした

ファイル名の形式が `translation_domain.言語.xlf` となっているみたいで、
validator.yaml の translation_domain と合わせる必要があります

“`diff

元記事を表示

Laravel 9 から Google Drive API で共有ドライブを操作する

:::note
Laravel Advent Calendar 2023 9日目の記事です🎄
:::

## はじめに
みなさん、お久しぶりです!リバネス開発チームのトミー(@tomyf)です!

今回は Google Drive の共有ドライブをWebサービスから管理したいという要望があったので、動かす所まで検証しました。

システムの概要としては、複数のGoogleドキュメントをまとめて、冊子にする工程を補助するアプリケーションとなっています。
APIを使って共有ドライブを操作する目的は、フォルダやファイルの構成と名称を執筆者の裁量に任せず、システム側で制御して管理しやすくするためです。

サービスアカウントの認証情報をJSONファイルで管理している記事が多数見受けられますが、今回は Heroku でホスティングすることを想定しているため、JSONファイルではなく環境変数で管理するようにしています。

## 環境
– Docker v24.0.6
– Laravel v9.25.1
– PHP v8.0.2
– google/apiclient v2.15.1

## Google

元記事を表示

【PHP】nullを含む式についての評価まとめ

## はじめに

この記事ではPHPにおけるnullと他の型との比較をまとめます。
先日、nullを含む式が意図しない挙動をしインシデントが発生してしまったので、その際調べたことを主にまとめています。

※この記事では、PHP8を前提にしています。バージョンによって異なる型同士の比較の評価が異なるためご注意ください。

## ① nullとString型

この場合は、null を “” に変換して数値または文字として比較します。よって以下のような結果になります。

“`php
var_dump(null < '0'); // bool(true) var_dump(null < '1a2'); // bool(true) var_dump(null < 'こんにちは'); // bool(true) var_dump(null < ''); // bool(flase) var_dump(null == '0'); // bool(flase) var_dump(null == '1a2'); // bool(flase) var_dump(null == 'こんにちは'); //

元記事を表示

issetだらけのコードはやめてください。

## はじめに

メタップス(Metaps)アドベントカレンダーの第9日目の記事です。

非常に多くのphpコードで、`isset`を乱用していると思います。どのケースで`isset`を使用すべきか、`isset`をなぜむやみに使用してはならないのか、その理由を理解しましょう。

`isset`が不適切に使用されたコードを見るたびに好ましくない感じがありました。この理由を明確にして`isset`を乱発するコードを最小化するためにこの記事を作成しました。

## 展開

### 良いコードは何か?

良いコードとは、解釈の幅を狭めることです。解釈できる場合の数を減らすことで、コードを迅速かつ明確に理解できます。

例えば、phpで`const CONSTANT_VALUE = ‘不変値’`とコードを使用すると、この値は固定されており、変更できないことが分かります。変数とは異なり、定数は最初に宣言された時点の値と異なる可能性がないため、定数の変更過程を追跡する必要はありません。定数を使用することは、値の変更可能性の判断を減らすことで、解釈の多様性を減らすことです。

迅速かつ明確に理解でき

元記事を表示

学校に自作のポータルサイト的なものを導入したかった話

こんにちは。
今日は学校に自作のポータルサイト的なものを導入したかった話をしようと思います。
# プロフィール
– 小6
– HTMLとかPythonが得意分野
– なんかしようとして個人事業主になった
– [ブロガー](https://ogatomo.net/)
# 事の発端
以前からJavascriptなどで便利系のツールを作るのが好きだったのでそれを一括で利用できるポータルを作ろうとしたのが始まり。
# Ver.1
PHPとCSSにBulmaを利用したなかなかいいデザイン。ログインはわかりやすく数字4桁を採用。(めんどいからMySQLは使わずすべてテキストファイルで管理)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518724/1f069118-22f9-a1ca-e607-dc88f78c0ead.png)

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

元記事を表示

式を評価、”ExpressionLanguage”

[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の9日目の記事です。

## 式を評価、”ExpressionLanguage”

[ExpressionLanguage](https://symfony.com/doc/current/components/expression_language.html)は、文字列の式を評価してくれるコンポーネントです。Symfony以外でも使えます。

### インストール

“`shell
composer require symfony/expression-language
“`

### 使い方

“文字列の式を評価”というのはなかなか伝わりにくいかなと思うんですが、実際のコードを見れば一目瞭然かなと思います。

“`php
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;

$expressionLanguage

元記事を表示

Docker構築で出たエラー群

Dockerを構築していて出会ったエラー達の備忘録です。

## Makefile:6: *** missing separator. Stop.
Makeファイルを作っていたので、以下のようにmakeコマンドの内容の行にインデントをつけ忘れていました。

**修正前**
“`makefile:Makefile
up:
docker compose up -d
“`

**修正後**
“`makefile:Makefike
up:
docker compose up -d
“`

## services.xxx.environment.0 must be a string

environmentの中では「-」が必要ない場合もあるので試してみてください。

**修正前**
“`docker:docker-compose.yaml
environment:
– xxx: xxx
“`

**修正後**
“`docker:docker-compose.yaml
environment:
xxx: xxx
“`

## services.xxx.build

元記事を表示

PHPの奇妙なincrement/decrementの挙動

# この記事について

今年の11月23日に公式リリースされたPHP8.3で導入されたRFCの中にこんなRFCがありました。

https://wiki.php.net/rfc/saner-inc-dec-operators

**Path to Saner Increment/Decrement operators**というタイトルにもあるようにこのRFCはIncrement/Decrement演算子の挙動についてもの申したいことがあるそう。そしてイントロダクションでこのRFCはこんなことを言っています。

> PHP’s increment and decrement operators can have some surprising behaviours when used with types other than int and float. Various previous attempts have been made to improve the behaviour of these operators, but none have been implemented.

元記事を表示

pg_send_query って何だ?

# pg_send_query って何だ?

## 概要
PHP で PostgreSQL を使用したい場合、多くの人が PostgreSQL 関数を利用するだろう。[PHPマニュアルのPostgreSQL関数](https://www.php.net/manual/ja/ref.pgsql.php)を見ると、`pg_send_` から始まる関数がいくつかあり使い方が気になったので調べてみた。

ちなみに自分は普段 `pg_query_params`, `pg_fetch_assoc` くらいしか使っていなかった。

## pg_send_* 関数について

`pg_send_*` という名前の関数は現在、`pg_send_execute`, `pg_send_prepare`, `pg_send_query`, `pg_send_query_params` の4種類が存在する。

それぞれの関数名の似ている `pg_execute`, `pg_prepare`, `pg_query`, `pg_query_params` と似た構造をしていて引数が同じだが返値が異なる。 `pg_se

元記事を表示

WordPressで”◯日以内に投稿された記事かどうか”の関数を作るモダンな方法

# 結論
下記コードをコピペして関数名に適当なプレフィックスを追加して使えばいい。

“`js
function is_recently_post( int $days = 7, ?WP_Post $post = null): bool {
/** @var DateTimeImmutable|false */
$post_time = get_post_datetime( $post );

if (false === $post_time) {
return false;
}
$days_difference = $post_time->diff(current_datetime());
return $days_difference->days <= $days; } ``` # 理由 [公式サイトで"これからの実装にget_the_date('U')やcurrent_time('U')を使うな"と書いてある](https://make.wordpress.org/core/2019/09/23/date-tim

元記事を表示

PHP8技術者認定初級試験を受けてみた

この記事は[ミライトデザイン Advent Calendar 2023](https://qiita.com/advent-calendar/2023/miraito-inc)の8日目の記事です。

前日の記事は[ブッチ](https://zenn.dev/t_kitamura)さんの[「これからChatGPT(AI)と共存するために知っておくべきこと Part2」](https://zenn.dev/t_kitamura/articles/289446c05c5469)でした。

自分はAIに関する知識がないのでこの記事を読んで知識をつけたいと思います。
Part4 までの予定なので楽しみしています!

# はじめに
先日「PHP8技術者認定初級試験」を受けてきました。

社内で資格取得を奨励する制度が導入され、日常の業務で使用している「PHP」に関連する資格試験があることを知り、
– 自身の「PHP」に関する知識はどの程度なんだろう
– 勉強することで業務に繋がるよね

と考え受験を決めました。

その内容をこの記事で共有していきたいと思います。

# 試験概要
– 概要:PHPプ

元記事を表示

Platform.shのCLIを使う

4日遅れのday4(!)の今日はPlatform.shのCLIを使っていきます。

## インストール

公式ドキュメントにあるインストール用のbashスクリプトを使います。
https://docs.platform.sh/administration/cli.html#1-install

Macの方はhomebrewからも入れられます。
“`shell
$ brew install platformsh/tap/platformsh-cli
“`

## 認証

インストールが完了したら、まずコマンドを打って認証を始めます。
“`shell
$ platform
“`

![スクリーンショット 2023-12-08 10.46.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23963/7c075966-879f-e6ab-f624-d302b5e13b9b.png)

自動的にデフォルトブラウザで127.0.0.1:5001が開かれて、そこからplatform.shのログインフォーム

元記事を表示

PHP8.1でのマルチバイト文字列関数の文字エンコーディングの挙動について

# 概要

PHP8.1の変更点でマルチバイト文字列関数の文字エンコーディング処理の変更が公式マニュアルには記載がなく手探りで調査することとなり苦労しました。
特に**文字エンコーディングの自動検出**の挙動が変わっている点の調査が大変で、HPのバージョンアップ後に影響調査漏れが発覚し本番トラブルにも発展しました。

今回は、前述の調査で得られた情報の中で**文字エンコーディングの自動検出**の挙動変更について重点的に紹介しようと思います。

下記の両方に当てはまる方は、同じ課題に直面する可能性が高いため、この記事の内容で理解をしてもらいつつ、ご自身でも詳しく調査することを推奨いたします。

– 文字エンコーディングの自動検出を使用している
– PHP8.1以上にバージョンアップを予定している

# PHP8.1のマルチバイト文字列関数

PHPの公式マニュアルには記載がない変更が、PHP8.1でマルチバイト文字列関数の挙動が変わっているものが多数あります。
しかし、それぞれに個別の変更点としては軽微なものが多くバグ修正のようなものがほとんどです。

– [PHP:

元記事を表示

EC-CUBEとLINE WORKSの連携

はじめまして!

ざっくり20年位システム開発関連のお仕事をさせて頂いております。
公開されている内容をベースにお仕事で経験した事例を皆さまにご紹介できたらと思います。

現在とあるECサイト(BtoB系)の保守開発を担当させて頂いているのですが、
ベースになっているのはEC-CUBE(オープンソースのElectronic Commerce向けコンテンツ管理システム(CMS))のVersion2です。
https://www.ec-cube.net/product/cases/detail.php?id=2994
ECサイト自体は約9年の歴史があり、サービススタートから現在まで大量の機能追加とカスタマイズが行われています。

# LINE WORKSとは?

LINEについては説明不要かと思いますが、
業務用に利用出来るビジネス版のLINEが**LINE WORKS**です。
LINEで使える機能に加えて、様々なビジネスシーンで利用するための管理機能やセキュリティ面での強化がされています。普段使い慣れているLINEと操作性もほぼ同じなので、導入が容易な事もメリットになります。
http

元記事を表示

Laravel10からInvokable検証ルールがデフォルトに

## はじめに
Laravel9で導入された[Invokable 検証ルール](https://github.com/laravel/framework/pull/42689 “Invokable 検証ルール”)がLaravel10からデフォルトとなったため、そちらの紹介をします。
※Laravelの独自バリデーションの手法の1つになります。

上記リンク先にも記載の通り、Laravel9時点で導入されその時点ではオプション指定しないと作成できない状態でしたが、Laravel10になってからは推奨となりオプションなしで作成することができるようになりました。

## 利用シーン
Laravel標準で用意されているバリデーションでは対応できない場合に、独自のバリデーションとして定義することが多いです。

## 実行環境
Laravel Framework 10.23.1

## ルールファイルの作成
まずはルールファイルを作成します。
以下、ルールファイルを作成するためのコマンドです。

“`command
php artisan make:rule MbDigit
“`

自動的に以

元記事を表示

一意な文字列作るよ、”Uid”

[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の8日目の記事です。

## 一意な文字列作るよ、”Uid”

[Uid](https://symfony.com/doc/current/components/uid.html)は、いろいろな種類のUID、一意な文字列を作成します。Symfony以外でも使えます。

### インストール

“`shell
composer require symfony/uid
“`

### UUID

[UUID](https://ja.wikipedia.org/wiki/UUID)にはいくつかの種類があります。`Uuid`クラスはそれぞれの種類の`Uuid` オブジェクトを返すスタティックなメソッドを用意しています。オブジェクトはそれぞれの種類ごとに用意されており、`Uuid` クラスを継承しています。オブジェクトにはそれぞれの形式に変換するメソッドが用意されています。

“`php

us

元記事を表示

【メモ】Laravel10 Logに関してドキュメントさっくりまとめ

## 概要
– さっくりとLogに関する情報をまとめる
– わからない部分は、ドキュメントコピペ

## 公式ドキュメント
https://laravel.com/docs/10.x/logging

多少省略もしているため、すべてを見たい場合は直接参照のこと、、
## Configuration

>All of the configuration options for your application’s logging behavior are housed in the config/logging.php configuration file. This file allows you to configure your application’s log channels, so be sure to review each of the available channels and their options. We’ll review a few common options below.
By default, Laravel will use the stack

元記事を表示

【PHP】マイナーフレームワーク「Flow」を試してみる~独自Exception編~

# 初めに
前回は[こちら](https://qiita.com/nnhkrnk/items/739ac12036c858525e23)の記事でマイナフレームワークFlowとdoctrineというORMを用い、DB接続を伴うAPIを作成しました。
今回はFlowにおける独自Exceptionの定義方法と、そのハンドリング方法を学んでいきます。

# Flow標準のExceptionHandler
Flowでは標準で2種類のExceptionHandlerクラスが用意されています。

* [DebugExceptionHandler](ProductionExceptionHandler)
* [ProductionExceptionHandler](https://github.com/neos/flow-development-collection/blob/27ffc953ae485033bed5354b20b45dbcfd37ce81/Neos.Flow/Classes/Error/ProductionExceptionHandler.php)

2つのHandlerクラスはどち

元記事を表示

Composerを深ぼってみた

現在PHPを始めてから約1年半になろうとしている大学生です。

本日はPHPを用いた開発では欠かせないComposerに焦点を当てて記事を書きたいなと思います。

ComposerはPHPやLaravelの使用者だったら誰もが使用しているツールかと思います。
ただ、あまり内部構造やcomposer install, composer requireとかの基本的な使い方以外の用法を使ったことがなかったので、今回は色々深ぼって調べていきたいなと思います。

## 想定読者

– PHP, Laravel等の使用者
– Composerの内部構造を知りたい
– Composerの便利な使い方を知りたい など

基本的な使い方がわかっていて、構造に興味を持っている方に良い情報を届けられたらなと思っています。

## Composerの基本おさらい

ComposerはPHPのパッケージ管理ツールという位置付けで存在しています。

パッケージとは標準で用意されているもの、例えばfor文や組み込み関数のなど、意外で使う便利な道具といったところだと認識していただければと思います。
EX) Guzzl

元記事を表示

OTHERカテゴリの最新記事