- 1. 継承・2回目
- 2. PHP array_rand()は配列の値ではなく配列のキーを返すので注意
- 3. 【Xserver】久々にcomposerを使ったらエラーが出る
- 4. Webアプリ開発 ログイン編
- 5. CodeIgniterについてアウトプットしてみた~Model編~
- 6. ボタンのカスタムショートコードを作る
- 7. PHPでファイルをアップロードする 画像アップロード
- 8. 継承
- 9. [Ubuntu22.04+Redis7+php8]phpredisをインストール
- 10. PHPカンファレンス小田原に参加しました。
- 11. PHPの参照渡し方法
- 12. CodeIgniterについてアウトプットしてみた~Entity編~
- 13. PHPUnitでデシジョンテスト
- 14. 高階関数
- 15. カプセル化
- 16. 【PHP】三項演算子
- 17. 【PDO】PHPでDB接続
- 18. PHP/Laravel インターフェースの使い方
- 19. 単体テストにおけるテストの対応関係について考える
- 20. コンストラクター、デストラクター
継承・2回目
## はじめに
継承についてまとめる・二回目
### オーバーライドとは
スーパークラスで定義された機能を他のクラスで再定義すること。
#### 参考コード
“`php:Person.php
class Person
{
public $firstName;
public $lastName;public function __construct($firstName, $lastName)
{
$this->firstName = $firstName;
$this->lastName = $lastName;
}public function show()
{
print “私の名前は{$this->lastName}{$this->firstName}です。
“;
}
}
“`“`php:BusinessPerson.php
require_once ‘Person.php’;class BusinessPerson exte
PHP array_rand()は配列の値ではなく配列のキーを返すので注意
## 概要
PHPの組み込み関数である`array_rand()`の仕様を勘違いして一瞬詰まったので簡単にまとめておく。
## array_rand()は引数の配列のキーをランダムで返す
言葉で説明するより見ていただいたほうが早い気がするのでまずはコードを掲載する。
「あ、い、う」をそれぞれランダムに返してほしくて下記のようなコードを書いた“`php
【Xserver】久々にcomposerを使ったらエラーが出る
XserverでLaravelを用いたアプリをデプロイしているときに、composerでエラーになってvendorフォルダが全くできずハマったので、将来の自分と同じ道でさまよっている方々のためにここに書き残しておきます。
## 1. 何をしていたか
数年ぶりにXserverにLaravelを用いた新しいアプリを置いていました。その時、うまく起動しないのはvendorフォルダがない、つまりcomposerを用いて必要なプログラムをダウンロードしていないというだけでした。そこで
“` bash
composer install
“`
を実行するとこんな感じでエラーが出てうまくいきませんでした。“`
Your requirements could not be resolved to an installable set of packages.Problem 1
– Installation request for laravel/framework v10.26.2 -> satisfiable by laravel/framework[v10.26.2].
Webアプリ開発 ログイン編
# 初めに
webアプリの開発ができたので、開発中に考えたことを書いていきます。
今回はログインについてです。# 開発環境
macOS Sonoma 14.4.1
PHP 8.3.3
Laravel Installer 5.2.0
Laravel Framework 11.0.5# ソースコード
https://github.com/opatu07/portfolio
# 考えたこと
## ログイン編
### 作りながら考えたこと
まずはビューで意識したことは
ログイン機能のコンポーネント化です。フォームの外枠の設定をする
panel.blade.phpフォーム欄の名前をつける
label.blade.phpバリデーションエラーを出す
error.blade.phpフォームでよく使われるものはコンポーネント化をすることで機能修正する際に該当箇所を見つけやすくしました。
次にルートは
“`web.php
Route::get(‘login’, [SessionsController::class, ‘create’])->middleware(‘g
CodeIgniterについてアウトプットしてみた~Model編~
## はじめに
今回はCodeIgniterで用意されているModelクラスについて説明します。
Modelは、単一のテーブルを便利に扱うための機能を提供するクラスです。
クエリビルダだと煩雑になりやすい各CRUD操作が楽になったりします!## Modelクラスの説明-設定
まず、設定系のプロパティについて、説明していきます。“`php:app/Models/User.php
ボタンのカスタムショートコードを作る
ボタンのカスタムショートコードの作り方を解説します。
## ボタンのカスタムショートコード
“`php
[btn link=”https://www.example.com”]クリック[/btn]
“`投稿画面でブロック挿入ツールからショートコードを選択します。次に、上記のショートコードを記述します。
## functions.phpに記述するコード
“`php
function my_shortcode($attrs, $content = ”) {
return ‘‘;
}
add_shortcode(‘btn’, ‘my_shortcode’);
“`functions.phpに上記のコードを記述します。
## コードの解説
### my_shortcodeという名前の関数を定義
“`php
function my_shortcode($attrs, $cont
PHPでファイルをアップロードする 画像アップロード
# インストール
“`bash
wget https://gist.githubusercontent.com/GitHub30/d6960b85c73e6e5f20386fa665873183/raw/upload.php
“`https://gist.github.com/GitHub30/d6960b85c73e6e5f20386fa665873183
# 動作確認
## JavaScript
“`javascript
var fd = new FormData()
fd.append(‘file’, new File([‘a’], ‘a.txt’))
await fetch(‘http://localhost/upload.php’, {
method: ‘POST’,
body: fd
})var fd = new FormData()
fd.append(‘file[]’, new File([‘b’], ‘b.txt’))
fd.append(‘file[]’, new File([‘c’], ‘c.txt’))
await fetch
継承
## はじめに
継承についてまとめる
### 継承とは
基になるクラスの機能(メソッド)を引き継ぎながら、新たな機能を追加したり、元の一部だけを修正したりする仕組み。
#### 参考コード
BusinessPersonクラスがPersonクラスを継承している。
“`php:Person.php
class Person
{
public $firstName;
public $lastName;public function __construct($firstName, $lastName)
{
$this->firstName = $firstName;
$this->lastName = $lastName;
}public function show()
{
print “私の名前は{$this->lastName}{$this->firstName}です。
“;
}
}
“`“`php:BusinessPerson.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