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

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

[Ubuntu22.04+Redis7+php8]phpredisをインストール

## 環境

– さくらVPS
– Ubuntu(22.04)
– nginx(1.26.0)
– Redis(7.2.4)
– php(8.3.6)

## 手順

phpredis は git リポジトリ経由でインストールする

phpredis のインストールには phpize が必要で、phpize のインストールは php-dev という拡張パッケージをインストールすればよい

“`リモート
sudo apt -y install php8.3-dev
“`

phpredis をインストール

“`リモート
git clone https://github.com/phpredis/phpredis.git
cd phpredis
phpize
./configure –enable-redis-igbinary
sudo make && sudo make install
“`

php の redis 拡張モジュールを追加

“`リモート
sudo apt -y install php8.3-redis
“`

元記事を表示

PHPカンファレンス小田原に参加しました。

## はじめに

PHPカンファレンス小田原とは?

https://phpcon-odawara.jp/

PHPカンファレンスの小田原出張版です。
今回が初開催となりました。

2024年4月13日(土)開催でした。

## 気になった講演

### FigmaとPHPで作る、1ミリたりとも表示崩れしない最強の帳票印刷ソリューション

昔帳票のシステム開発に携わっていて、確かによくズレるし罠も多かった経験があるため気になって聞きに行きました。
svgから生成するのはなるほどーという感じでした。
とはいえ結局泥臭くやる必要がある部分は変わらず、そもそも帳票というものは複雑度が高く難しいものなんだな、という気持ちになりました。

### VAddy PHPカンファレンス全部スポンサーする!の裏側

https://drive.goog

元記事を表示

PHPの参照渡し方法

# PHPの参照渡し方法

参照渡しについて説明しているサイトは下記のようなプログラムの書き方をしています。

“`php

“`

これで**TestMessage** と出力されます。
**$message** を直接変更していないのに、**rewrite関数** 内での変更が **$message** に対して有効になります。
関数の引数に **&** をつけなければ、上書きされることはありません。

次に、変数代入の参照渡しを説明します。

## 変数代入の参照渡し

“`php

“`

これは、**TestMessge** と出力されます。
2行目で **$message** の持つ参

元記事を表示

CodeIgniterについてアウトプットしてみた~Entity編~

## はじめに

今回はCodeIgniterで用意されているEntityクラスについて説明します。
Entityクラスは、テーブルの1レコードの各カラムの`ビジネスロジック`を定義するクラスです。
DDDのドメインモデルに近い?のかもしれません。

:::note info
Entityは、CodeIgniterのversion4から導入されました。
:::

ビジネスロジックをEntityクラスに集約することで、コードの保守性が高まり、品質が高くなりそうです。

## Entityクラスを使わない場合の課題

例えば、ユーザテーブルが以下のようなテーブル構成になっているとします。

| 物理名 | 論理名 |
|:-:|:-:|
| id | ID |
| last_name | 姓 |
| first_name | 名 |
| login_id | ログインID |
| password | パスワード |
| is_active | 有効フラグ |
| created_at | 登録日時 |
| updated_at | 更新日時 |
| delete

元記事を表示

PHPUnitでデシジョンテスト

# 概要
PHPUnit + ソフトウェアテストの勉強の一環として投稿します。

# 開発環境
PHP 8.1.28
Composer:2.7.2
phpunit: 10.5
IDE:VSCode

# 題材
ATMの引出し手数料
以下ソフトウェアテスト技法練習帳~知識を経験に帰る40問2.2.1から引用
・平日の0:00~8:44は手数料は110円です。
・平日の8:45~17:59は手数料は0円です。
・平日の18:00~23:59は手数料が110円です。
・特定の条件を満たしたお客様(特別会員)は曜日や時間に限らず手数料が0円です。

# ソフトウェアテストの用語
## ブラックボックステスト技法
仕様に対してテスト設計する技法
入力したデータと出力したデータのみを対象にするテスト

## ホワイトボックステスト技法
テスト対象のソフトウェアの内部構造を検証するテスト

### ステートメントテスト
命令文に対するテスト

### デシジョンテスト
if-else switch-case分岐のテスト

### 具体的には

if文がない関数のコンポーネントのテスト
→ステートメ

元記事を表示

高階関数

## はじめに
配列に特化した関数です。応用情報の勉強をしていてphpの勉強がおざなりになっていたのでしっかりやっていこうと思います。

## 高階関数
配列に特化した関数といえばいいのでしょうか
引数に配列と関数を使用します。
array_mapとarry_filterを見ていきます。

## array_map()
配列の値全てに対して関数を実行します。
“`php
//渡された値を2乗して返す関数
function double($n){
return $n * $n;
}

$nums = [1,3,5,7];
$newNums = array_map(‘double’, $nums);
print_r($newNums);
“`
“`
Array([0] => 1 [1] => 9 [2] => 25 [3] => 49)
“`
array_mapの第一引数のdouble関数に、第二引数のnumsの値が1つずつ渡され実行されます。
doubleの返り値が入った配列が返ってきます。

## array_filter()
“`php
//渡された値が偶数なら返す

元記事を表示

カプセル化

## はじめに

カプセル化について整理する。

### カプセル化とは

クラスの機能のうち使い手に必要ないものを隠すこと。

### アクセサーメソッド

カプセル化の典型例として、プロパティを隠蔽するためにアクセサーメソッドを使用する例。
セッター(`setBase`, `setHeight`)では与えられた引数が負数の場合には例外を発生させている。

“`php:TriangleFigure.php
setBase(1);
$this->setHeight(1);
}

public function getBase(): float
{
return $this->base;
}

public function setBase(fl

元記事を表示

【PHP】三項演算子

# if文とは
様々なプログラミング言語では条件分岐の1つであるif文が使われる。
以下のように使うことができる。

“`ruby:PHP
function sort(string $dir, array $arr): array {
if($dir == ‘R’){
sort($arr);
}else{
rsort($arr);
}
return $arr;
}
“`

上記では`$dir`という文字列が’R’であれば`$arr`配列の中身を昇順に並び替え,’R’以外であれば降順に並び替える処理を行う。if文を使用すると8行のコードを書く必要があるが、三項演算子を使用することで簡潔に書ける場合もある。

# 三項演算子とは
三項演算子は演算子のひとつで3つの項目を使用する唯一の演算子である。書式は次の通り。

“`ruby:PHP
条件式 ? 式1 : 式2
“`
条件式を評価し、TRUEであれば式1、FALSEであれば式2を返す。また、三項演算子の短縮形として`?:`も存在する。

:::note warn
三項演算子を “積み重ねて” 使

元記事を表示

【PDO】PHPでDB接続

# PHPでDB接続

PDO (PHP Data Object) を使用しPHPによるDB接続する方法を解説します。

DBはPostgreSQLを使用します。

大まかな流れとしては、
__1. DB接続__
__2. SQLクエリの実行__
__3. データ (クエリ) の取得__

です。

DB接続の前に、php.iniファイルを編集してPDOを使用できるようにしないといけません。

※__C:\xampp\php\php.ini__ の 910~950行目あたりにある

“`
;extension=pdo_mysql
;extension=pdo_pgsql
;extension=pdo_sqlite
“`

:::note info

使用したいDBに対応している、行頭の 「;」 を削除します。その後、Apacheを再起動します。

:::

## 1. DB接続
では、php.iniファイルの設定ができたらPHPからDB接続していきます。
まず、PDOクラスに接続したいDBの情報(DB名、ホスト名、ポート番号、ユーザー名、パスワ

元記事を表示

PHP/Laravel インターフェースの使い方

皆さんはPHPの開発現場でインターフェースを使うことはありますか?
文法や使い方はわかるけど、どういう時に使うのがいいのか分からない人も多いと思います。

この記事は初心者向けに具体的な例も交えてインターフェースの使い方を紹介したいと思います。

## インターフェースとは

インターフェースは「境界面」「接点」の意味を持つ言葉です。文脈により意味合いが変わってくる言葉ですが、今回はPHPのオブジェクトインターフェースについてなるべく分かりやすく解説します。

https://www.php.net/manual/ja/language.oop5.interfaces.php

### インターフェースはシグネチャのみ定義

インターフェースは特定の機能を提供するための入力と出力の仕様を定義します。

“`php
interface Hoge
{
public function foo(string $bar): bool;
}
“`

関数名+引数+戻り値の型の組み合わせのことを `シグネチャ` と呼びます。
インターフェースはシグネチャのみの仕様を定義するので具体的な実

元記事を表示

単体テストにおけるテストの対応関係について考える

## この記事について

単体テストにおいてテスト対象のクラスとテストクラスの関係は基本的に1対1にすることが多いと思いますが、その対応関係とトレードオフについての個人的な考察です。(考察というよりもメモに近いかもしれません)

## 簡単な計算機の例

足し算、引き算、掛け算を行うことができる計算機を例に2つのパターンの実装を考えてみます。
言語はPHPを想定しています。

### 2つの実装パターン

ひとつのパターンは、1つのクラスの中にプライベートメソッドとしてそれぞれの処理を持つ例です。

“`mermaid
classDiagram
class Calculator {
+ calculation(Operation, int, int) int
– plus(int, int) int
– minus(int, int) int
– times(int, int) int
}
“`

ひとつのパターンは、Strategyパターンを適用した例です。

“`mermaid
classDiag

元記事を表示

コンストラクター、デストラクター

## はじめに

コンストラクター、デストラクターについてまとめる

### コンストラクター

インスタンス化のタイミングで実行されるメソッド。
主にプロパティの初期化、外部リソースの初期化などの処理に使われる。

“`php:Person.php
class Person
{
public $firstName;
public $lastName;

public function __construct($firstName, $lastName)
{
$this->firstName = $firstName;
$this->lastName = $lastName;
}

public function getFullName()
{
print “

僕の名前は{$this->lastName}{$this->firstName}です。

“;
}
}
“`

“`php:construct.php

元記事を表示

Next.jsとLaravelを使ったSanctum認証とSSRフェッチ時に必要な対応

## はじめに
本記事では、Next.jsとLaravelを使用したアプリケーション開発中に遭遇する可能性のある認証関連の問題に焦点を当てています。具体的には、サーバーサイドレンダリング(SSR)時に`Laravel Sanctum`を用いた認証を行う際の一般的なエラーと、その解決策について解説します。

## エラー
– エラー内容はSSR内にてサーバーサイドフェッチ時apiを実行すると`401 Unauthenticated`が返ってきてしまうものです。

## 原因
この問題の主な原因は、SSR中にAPIリクエストを行う際、適切な`Referer`ヘッダーや`Origin`ヘッダーが設定されていないことにあります。Laravel Sanctumではこれらのヘッダーを利用してリクエストがアプリケーションのフロントエンドから送信されたものであることを検証するらしいです、、、。

## 解決策
1. **APIリクエストのヘッダーに`Referer`と`Origin`を含める**: Next.jsからのすべてのAPIリクエストに、正しい`Referer`ヘッダーと`Origin`ヘッダ

元記事を表示

Webアプリ開発 ホーム画面編

# 初めに
webアプリの開発ができたので、手順を公開していきます。

# 開発環境
macOS Sonoma 14.4.1
PHP 8.3.3
Laravel Installer 5.2.0

# ソースコード
こちらのリンクから取得できます。

https://github.com/opatu07/portfolio

# 手順
## レイアウト編
管理がしやすいのでレイアウトのファイルをコンポーネントに入れました。
viewsディレクトリにcomponentsディレクトリを配置します。
そこにlayout.blade.phpを配置します。
これがすべてのファイルの基準になります。

![スクリーンショット 2024-04-17 11.12.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/6549cc8a-5aa2-b043-87b3-ece19ce9ef70.png)

左上のアイコンをクリックするとこのホーム画面に戻るようになってます。

ユーザー登録を押すとユーザーの

元記事を表示

1年間のPHP系のカンファレンス時系列まとめ(2024年)

# 概要
気がついたら、気になるカンファレンスが既に終わっていたということも往々としてあり、1年間のPHP系カンファレンス時系列を本記事にはまとめる。
今回は2024年の時系列でまとめているが、他の年でも継続的に行われていれば参考になる時系列であると思う。
※ 更新があれば随時書いていきます。

# 時系列
## 1月
### PHPカンファレンス北海道
https://phpcon.hokkaido.jp/

1月12日(金)~ 1月13日(土)
in 北海道(札幌市民交流プラザ クリエイティブスタジオ)

## 2月
### PHPカンファレンス関西
https://2024.kphpug.jp/

2月11日(日)
in 大阪(グランフロント大阪 北館)

## 3月
### PHPerKaigi
https://phperkaigi.jp/2024/

3月7日(木)~ 3月9日(土)
in 東京(中野セントラルパークカンファレンス)

## 4月
### PHPカンファレンス小田原
https://phpcon-odawara.jp/

4月13日(土)
in 神奈川(おだわ

元記事を表示

お名前.com のレンタルサーバーでLaravelを動かすメモ

## 対象
* RSプランを契約している (重要)
* CLI を扱える
* SSH を行なったことがある
* レンタルサーバ系のコントロールパネルを扱ったことがある
* PHP 8.1

## 概要
1. コントロールパネルから SSH ログインできるようにする
1. パソコンから SSH ログインする
1. composer をインストールする
1. node をインストールする
1. プロジェクトフォルダを作成する
1. シンボリックリンクを貼る
1. .htaccess を修正する

## SSH できるようにする
### Key の登録
(登録済みの場合はスキップ)
`サーバー` > `SSH` に移動し `SSH Key を追加` する。

### 自動生成
秘密鍵がダウンロードされる (`Key名.pem`)。
該当ファイルを `~/.ssh` フォルダに移動して、パーミッションを `600` に変更する

### インポート
ローカルで自分で 公開鍵/秘密鍵 を生成する (作り方は各自調べる)。
この時、鍵が `~/.ssh` 以外に保存されている場合は、 `~/.s

元記事を表示

PDO (PHP Data Objects)・3回目

## はじめに

PDOについてまとめる・3回目

### 結果セットの取得

結果セットとは、SQLのSELECT命令によって、一個または複数のテーブルから取り出されたレコード群を保持するために、メモリ上に用意された仮想テーブルのことを言う。

以下はbookテーブルの内容をテーブルに整形&表示するコード。

“`php:result.php




結果セット

AtCoderの過去問200問解いて得たこと

はじめまして!CREとしてエンジニアをやってますkazuです🦌

AtCoderの問題を2023年12月から解き始めて、2024年4月で200 問に達成したので、そこで気づいたことをいくつか共有しようと思います!

![スクリーンショット 2024-04-28 8.30.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2597943/fcd22a12-8a74-86ea-9525-87d14571fd63.png)

やり始めた経緯などについては、前回の記事があるので、気になる方はご覧ください✨

[AtCoderの過去問100問解いて得たこと – Qiita](https://qiita.com/KazukiITWeb1/items/07ac25930d859ed15e91)

# 100問との違い

– 問題にもよるが1~2処理は、パッと思いつくようになった
– 人のコードを参照するようになった
– 「この問題のときは、この関数が使えそう」など脳内サジェストできるようになった
– 「この問題は

Laravelでリポジトリーパターンを使う

## 実装

### 基本的なファイルを作成

“`bash
# Model, Controller, Migration, Seederファイルを作成
php artisan make:model [Model名] -crms
“`

### Interfaceを作成

“`php
// app/Interfaces/TaskInterface.php

namespace App\Interfaces;

interface TaskInterface
{
public function index();
public function store(array $data);
public function show(string $id);
public function update(string $id, array $data);
public function destroy(string $id);
}
“`

### Serviceを作成

“`php
// app/Services/TaskService.php

Flowを半年間触ってみた感想

# 初めに
PHPフレームワークFlowを触り始めて半年がたちました。
Flow関連で書いた記事も気が付くと20前後となり、半年前と比べてかなり知識もついてきたと感じます。
今回は、半年触ってみた感想を記録しておこうと思います。

# FLowとは
Flowとは[flownative](https://www.flownative.com/)社が出しているオープンソースのPHPフレームワークです。

https://flow.neos.io/

**ドメイン駆動設計**(DDD)を中心原理として設計されたフレームワークであり、DDDを満たすための機能を多く提供しています。

## Flowでドメインモデリング
Flowはドメイン駆動設計(DDD)の概念を用いた実装を強く推奨しているフレームワークです。そのため、開発者がDDDを用いた実装がしやすくなるような機能を多数提供しています。

* **ドメインモデルを格納するためのディレクトリ**が最初から用意されている
* **ドメイン知識を表現するためのアノテーション**が用意されている
* ドメインモデルを元に**TBLが自動生成される*

ISBNコード 署名 価格