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

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

PHPの視点でTypeScriptを勉強してまとめてみました

普段PHPとJavaScriptを使って開発していますが、TSを触る機会が増えたので勉強したものをまとめてみました。

# Primitive タイプについて

### PHPとTSが存在するprimitive型

| PHP | TypeScript |
|:-:|:-:|
| int | number |
| float | number |
| string | string |
| bool | boolean |
| Undefined variable エラーになる | undefined |
| mixed | any |
| void | void |

objectとarrayについては下にまとめます。

### 変数定義時の型定義

“`php:PHP
// 通常の変数定義
$a = 5.5;

// このように定義するとSyntaxエラーが起きる
float $a = 5.5;
“`

“`ts:TypeScript
const myStr: string = “”;
const myNullableStr: string|null =

元記事を表示

Laravelで日付操作をする場合は、Carbonではなく「CarbonImmutable」を使用する

## Carbon処理の意外な落とし穴
普段何気なくCarbonを使用していないでしょうか?私もハマったのですが、Carbon処理には以下のような落とし穴が存在します
“`PHP
addDay();

if ($now->format(‘Y/m/d H:i:s’) !== $tomorrow->format(‘Y/m/d H:i:s’)}) {
echo “期待する結果です!”;
} else {
echo “意図しない結果です”
}
“`
このコードは、`$now`と`$tommorow`は別々の日付を代入しているので、`期待する結果です!`という値が表示されるはずです

実行結果:
“`
意図しない結果です
“`
なんということでしょう・・・。`$now`と`$tommorrow`が等しいと評価されています。これは、**「Carbonのメソッドを呼び出したインスタンス自身が書き換えられる**」ことが原因です

つまり、下記コード

元記事を表示

エンジニアインターン3日目

今日はテスト環境からwordpressのテンプレートを作成した。
データベースから商品の品番、商品状態、色を取得して、商品の最新の値段を更新する仕組みを作った。
phpにsql文とwordpressからget_field()を使って値を取得し、その値に合った商品の最新の値段をデータベースから読み込んでhtmlに表示させた。
mysqlからデータを読み込む場合は情報を守るためのセキュリティーも大事になってくる。$query = 変数->prepare(SELECT文 %s,変数…)この記述でデータを守ることができる。$変数のところを%sに置き換え、sql文の最後に%sに置き換えた変数をコンマ(,)区切りで順番に書いて、$変数=$wpdb->get_result($query);を記入すれば完成だ。
インターンに参加して初めて大まかなタスクを任されてうれしい気持ちと責任感を感じた。早く自分が成長し、もっと多くのタスクを任されるようになりたいと思った。一つ一つ経験を積み、身に覚えさせて自信を持ってコードを書いていきたい。

元記事を表示

PHPにおける名前空間について改めて学習する

## PHPにおける名前空間について改めて学習する
PHPやLaravelを扱っているとほぼ必ず目にするのが名前空間。
なんとなくだった理解をもう少し深くするために今回まとめていきます。

### 名前空間とは
PHPにおける名前空間とは一言でいうと、`プログラム内で同じクラス名や関数名を使用しても競合しないように区分けをすること`。

プログラムにおいて、同じ名前のクラスや関数を定義するとエラーが起こります。
競合しないためには、名前が被らないようにする必要があり、被らない長い名前にする必要がありますがそれだとソースコードの可読性が低くなってしまいます。
そこで名前空間を用いてあげます。

名前空間を用いることで、それぞれが独立した空間となり、
自由に名前をつけてあげることが可能となります。

別の空間に同じ名前のクラスや関数があったとしても競合することがありません。

### 名前空間の作り方
名前空間では、ソースコードの一番上部分に`namespace`というキーワードを使って指定してあげることができます。
このように記載をすると、TestGroupという名前空間を指定すること

元記事を表示

【Wordpress】if文の覚え方(イメージの仕方)

# はじめに
Wordpress(以下、WP)でのWEBサイト構築では基本的な処理を使うことがほとんどですが、頻繁に使うことがないと「あれ?」っとなってしまう【条件分岐】。
プログラミングをやったことがない方だと何となく敷居が高く感じる。
でも何とか覚えたい!と言う人向けに、条件分岐で使うif文を書く際ののイメージの仕方を記事にしました。

:::note info
WPのテーマを自作しようと考えている方は、こちらでテンプレートの作り方を解説しています。コードもあります。
+ [【初心者向け】Wordpressテーマを自作する際に分かってると良いかもしれない事](
https://qiita.com/makkie/items/dc764c2845492079c0af)
+ `index.php`のコードを知りたいよって方はこちら
[【初心者向け】Wordpressテーマを自作する[index.php]](https://qiita.com/makkie/items/b5231a9f63b076c70af8)
+ `header.php`のコードを知りたいよって方はこちら
[【初心者向け

元記事を表示

【メモ】WordPressでPHPのカスタマイズ

# 【メモ】WordPressでPHPのカスタマイズ

## ■自分の状況

Laravel、Fuelなどでの開発経験があるが、WordPressにはふれたことがない。

自分の開発メモ、情報共有として。

## ■function.phpとショートコードを用いたサンプル

### ●現時点の理解

– function.php

→関数の定義ファイル。ここにコードを追加してカスタムする

→配置場所:/wp-content/themes/テーマの名前/function.php

​ →存在するテーマごとにfunction.phpが存在している。

​ →ファイルを間違えないように注意

​ →テーマの適用のし忘れ注意

– ショートコード

→テーマからfunction.phpを呼びだすための仕組み

### ●サンプル

#### function.php

パス:配置場所:/wp-content/themes/テーマの名前/function.php

“`php
function testFunc() {
// returnとバッファの利

元記事を表示

バリデーション(withValidator)

### withValidatorを用いたバリデーション

メモです。

検索窓にて、
金額の上限と下限を設定するときに
#### 上限値が下限値未満の際にエラーになるバリデーションを作成したかった。

以下の記事を参考にさせていただきました。
https://www.kamome-susume.com/laravel-withvalidator/

$validator -> after(
function($validator){
$使用する値1を入れる変数1 = 使用する値1を持ってくる
$使用する値2を入れる変数2 = 使用する値2を持ってくる
if(isset( 変数1) && isset( 変数2)){
if(ここで上限下限のif文の条件を作成){
  $validator->errors()->add(‘errorを表示する場所’, ‘エラー文’)
}
}
} ) ;

after の()を最後閉じ忘れないように

上限値を下限値未満にするとエラーが表示されました。

元記事を表示

PHPのメモ

## 日付と時間
[strtotime](https://www.php.net/manual/ja/function.strtotime.php)
UNIX タイムスタンプに変換する
[date](https://www.php.net/manual/ja/function.date)
UNIX タイムスタンプを書式化する

“`timestamp.php
// デフォルトのタイムゾーンを設定する
date_default_timezone_set(‘Asia/Tokyo’);

date(“Y-m-d”, strtotime(“now”)); // 2022-12-16
date(“Y-m-d”, strtotime(“-5 day”)); // 2022-12-11
// “Y-m-d H:i:s”: MySQLのDATETIME
date(“Y-m-d H:i:s”, strtotime(“now”)); // 2022-12-23 11:56:09
“`
:::note warn
注意
日付の足し算・引き算を行うことはおすすめしない
→DateTime オブジェ

元記事を表示

【PHP】in_arrayではなくissetとarray_key_existsを使おう

# in_arrayではなくissetとarray_key_existsを使おう
## 理由
* in_arrayよりもissetやarray_key_existsの方が断然処理が早いから。

## 使用方法
### issetの場合
“`php
$array = array(
“orange” => true,
“banana” => true,
“lemon” =>true
);
if(isset([‘orange’])){
echo “これはオレンジです”;
}
“`

### array_key_existsの場合
“`php
$array = array(
“orange” => true,
“banana” => true,
“lemon” =>true
);
if(array_key_exists(“ora

元記事を表示

PHPでMutationTesting(Infection)をして、十分な単体テストを書く

MutationTestingってのが世の中的にどの程度一般的なのかはわかりませんが、会社的に微妙に盛り上がっていて、PHPでも実行できるがそこまで記事がなさそうなので書いてみます。

## MutationTestingとは

単体テストが十分に必要なだけ書けているかを測る手段で、単にテストの際にその部分を通っているかというカバレッジだけでなく、質的な面でもどうなのかがわかるものです。
コードに少し変更を加えてそれでも単体テストは成功するのか失敗するのか、コードに変更を与えたのだからテストは失敗するべきでそういうテストが書けているか、というのを判定していって質を判定します。

例えば、カバレッジは通っているかだけなので

“`php
if ($a > 0) {
// hoge
}
“`

このコードで言えば$a = 3をテストすれば、単体テストは通るしカバレッジ的にもOKなわけですが、falseのテストパターンはなくて、

“`php
if (true) {
// hoge
}
“`

と書き換えてもテスト全体を通して失敗がない(mutantが生き残る)ため質が

元記事を表示

ちょうぜつソフトウェア設計入門を読んだ

[ちょうぜつソフトウェア設計入門 ――PHPで理解するオブジェクト指向の活用:書籍案内|技術評論社](https://gihyo.jp/book/2022/978-4-297-13234-7)
を読んだ。

## 感想
とても良い本だった。
オブジェクト指向は何でないか、というところを核にして、SOLID原則、デザインパターンやTDDといった広く知れ渡っている概念を時系列や要求に沿って説明してくれる本だった。
今まで、設計に悩んでいて手当たり次第に本を読み、何となく分かっているつもり、書けているつもりのところを改めて整理してもらったので、他人と話すときもある程度自信を持って話せるようになりそう。

## 読んでいたときのメモ
### p26. 最初はちょっと分けすぎぐらいで十分
完全初心者から脱却すべくDRYを意識して…でコードを書くと、どれぐらい似たようなコードをまとめられるか、というところに目線を置いてしまいがちだったなということを思い出した。
最近はとりあえず分割して書いておいて、後から共通点が見つかればモジュールとかにまとめようとしているところだったので、その方針が間違っていな

元記事を表示

Laravel FortifyのレスポンスをJSONで返す方法

## 背景
通常、Laravel Fortifyを使用してログインに成功すると、Fortifyはアプリケーションの`fortify.php`内の `home`設定オプションで設定した URI にリダイレクトします。ログイン要求がXHR要求であった場合、200HTTPレスポンスを返します。

ただし**SPAの構成などをとっている場合は、レスポンスをJSON形式で返したい**こともあリます。そんな時に行う設定を備忘録がてら記載していきます。

## FortifyのレスポンスをJSONで返す方法
早速結論ですが、`App\Providers\FortifyServiceProvider.php`内の`register`メソッドに下記コードのように実装します。返すJSONの構造は適宜変更してください。
“`php:App\Providers\FortifyServiceProvider.php
use Laravel\Fortify\Contracts\LogoutResponse;

public function register()
{
$this->app->instan

元記事を表示

【Laravel】オリジナルのバリデーションルールを作る

# 何を作るのか

Laravelは色々なバリデーションをかけることができますが、オリジナルでバリデーションルールを追加したい場合もあります。BLOCSで、オリジナルのバリデーションルールの作り方を説明します。BLOCSでは、入力フォームへのバリデーションをテンプレートで指定します。オリジナルのバリデーションルールも`data-validate`で指定します。`data-validate`の詳しい説明は[こちら](https://blocs.jp/reference/data-form_data-validate.html)で。

https://qiita.com/hyada/items/11597f88102ed1c45407

# ルールを作る

artisanでオリジナルのルールを作ります。

“`sh
php artisan make:rule Myrule
“`

作成したルールを編集して、ルールを作ります。まず、コンストラクタで汎用性を持たせるために、倍数を検証する数字を設定できるようにします。

“`php:app\Rules\Myrule.php
pub

元記事を表示

【Laravel】Sailを使った環境構築

# 前提条件

– Windows環境の場合、WSLを構築しておく必要がある。
– Ubuntuターミナル上でgenie起動

# 環境構築

以下のコマンドを実行する

“`bash
$ curl -s “https://laravel.build/{プロジェクト名}?with={使用するサービス(カンマ区切り)}” | bash
“`

## 使用するサービスについて

利用可能なサービスは以下になります。

– mysql
– pgsql
– mariadb
– redis
– memcached
– meilisearch
– minio
– selenium
– mailhog

サービスを指定しない場合は

mysql、redis、meilisearch、mailhog、selenium

のサービスが設定されます。

上記コマンドを実行するとlaravelのディレクトリが作成されます。

![スクリーンショット 2023-01-15 18.48.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.

元記事を表示

PHPerが学ぶGo言語② 関数・構造体

豚さんです。
今回は関数・構造体について書いていきます。

Go言語にはクラスが存在しないという事前知識はあり、
代わりに構造体というものが存在するということは
調べて何となく知っている所からスタートです。

まずは、関数の説明を書いていき構造体の説明に移っていきます。

※ 注意:内容はPHPか何かの言語を書いたことがある方向けなので、
説明を割愛している箇所は多々ありますので、ご了承ください。

**go version go1.19.4 darwin/amd64**

# 1. 関数
前回の記事では、とりあえずmain関数で実行していましたが
どういうことか理解していませんでした。
Go言語はmainパッケージのmain関数で実行されるんですね。
“`sample.go
// Goのプログラムはmainパッケージから実行する
package main

import “fmt”

func main() {
fmt.Println(“テスト”)
}
“`
“`
$ go run sample.go
テスト
“`

では、

元記事を表示

➁バッチ処理機能、タスクスケジュール機能(Laravel)

## 始めに
Laravelのバッチ処理機能を実装したので
備忘録として記事にしました。
2部構成となっております。
 ➀:バッチ処理機能(https://qiita.com/fuku_rin/items/546494332e666482a9eb)
 ➁:タスクスケジュール機能(Laravel機能)

➀から引継ぎついでいる内容となっております。
ご了承願います。

バッチ処理:特定の日時に指定した処理を実行できる処理のこと。
タスクスケジュール機能:Laravel内でバッチ起動の日時を設定することができる機能

## 環境
| 開発環境 |バージョン |
|———–|————|
| __Laravel__ | 8.83.19 |
| __PHP__ | 7.3.10 |
| __MySQL__ | 15.1 |
| __MariaDB__ | 10.5.10 |
| __Server__ | Amazon Linux |

## 手順
__1, Kernel.phpの編集設定__
__2, 日時の設定__
__3, cronと

元記事を表示

➀バッチ処理機能、タスクスケジュール機能(Laravel)

## 始めに
Laravelのバッチ処理機能を実装したので
備忘録として記事にしました。
2部構成となっております。(➀、➁)
 ➀:バッチ処理機能
 ➁:タスクスケジュール機能(Laravel機能)

バッチ処理:特定の日時に指定した処理を実行できる処理のこと。
タスクスケジュール機能:Laravel内でバッチ起動の日時を設定することができる機能

## 環境
| 開発環境 |バージョン |
|———–|————|
| __Laravel__ | 8.83.19 |
| __PHP__ | 7.3.10 |
| __MySQL__ | 15.1 |
| __MariaDB__ | 10.5.10 |
| __Server__ | Amazon Linux |

## 手順
__1, Laravel内にcronとの連携処理を登録する__
__2, Laravel内に処理したい内容を実装する__
__3, cronに実行コマンドを登録、実行する__

## 1, Laravel内にcronとの連携処理を登録する

バッチ登録用の

元記事を表示

【CakePHP】入門記事

# 0. はじめに
## 0-1. 全体の流れ
> [1.教材](#1-教材)
> [2.基礎](#2-基礎)

## 0-1. TL;DR
– CakePHPの教材や基礎参考リンク集まとめ

## 0-2.
# 1. 教材
https://book.cakephp.org/4/ja/tutorials-and-examples/blog/blog.html

https://book.cakephp.org/4/ja/tutorials-and-examples.html

https://book.cakephp.org/3/ja/tutorials-and-examples.html

https://dotinstall.com/lessons/basic_cakephp_v2

https://dotinstall.com/lessons/basic_cakephp

# 2. 基礎
https://book.ca

元記事を表示

生PHPでAPIルーティング, リフレクションで動的にクラスメソッド実行

# 生PHPで、APIルーティング
要件
`api/class/method`でのAPIリクエストを想定。
リフレクションで動的に実行する。

“`php index.php
/api/index.php
// var_dump($script_name[‘REQUEST_URI’]); => /api/class/method

// URI`api/hoge/fuga?aa=1`から、`hoge/fuga`を取得
// デリミタは、URIの`/`と被らないように指定
$delimiter = ‘~’;
$pattern = $delimiter .dirname($_SERVER[“SCRIPT_NAME”]).’/([\w]*)/([\w]*)’ . $delimiter;
$result = preg_match($pattern, $_SERVER[“REQUEST_URI”], $matches);

// 正規表現より、`Index Out Of Bounds`は起きな

元記事を表示

【Laravel】ジョブとキューの基本

## キューとは

ジョブを貯めておく箱。基本的には先入先出法(FIFO)で処理を実行する。

キューの候補として、MySQLといったRDBやRedisのようなNoSQL、Amazon SQSが候補として挙げられる。

## ジョブとは

キューに格納する処理そのものこと。ユーザが応答を待たず、バックグラウンドプロセスで動かしたいもの。

## 環境

Laravel 9.35.0

PHP 8.1.2

## 事前準備

今回は、データベースのテーブルをキューとして検証してみます。

以下のコマンドでキュー用のテーブルを作成します。

“`shell
$ php artisan queue:table
$ php artisan migrate
“`

.envファイルの以下の箇所をsyncからdatabaseに変更します。

“`php
QUEUE_CONNECTION=database
“`

## サンプル実装

例えば、ユーザ作成処理の後処理としてメールで完了通知を送るケースがあったとします。

まず、以下のコマンドでジョブクラスを作成します。

“`shell
$

元記事を表示

OTHERカテゴリの最新記事