PHP:プロになるためのPHPプログラミング入門 10

公開:2026.06.06(土) 22:04

プロになるためのPHPプログラミング入門 10

以下書籍に付属するサンプルの実行環境を構築する。
プロになるためのPHPプログラミング入門」(ISBN 978-4-7741-4972-1)

環境は以下記事のものを使用
PHP:プロになるためのPHPプログラミング入門 サンプル環境構築

PHP:8.3.30
MySQL:8.0.46

リスト 3-1 郵便番号検索プログラム (/ppa/p32mysql.php) (P.121)

サンプルをそのまま実行(http://localhost:8080/prophp_sample/ppa/p32mysql.php)するとエラーが発生する。

Fatal error: Uncaught Error: Class "mysqli" not found in /var/www/prophp_sample/www/ppa/p32mysql.php:4 Stack trace: #0 {main} thrown in /var/www/prophp_sample/www/ppa/p32mysql.php on line 4

対応
Dockerfileを追加、php:8.3-apacheイメージに mysqli を追加するようにする。
# 現在お使いのイメージをベースにします
FROM php:8.3-apache

# mysqli 拡張機能をインストールするコマンドを追加します
RUN docker-php-ext-install mysqli

compose.yamlを修正、php:8.3-apacheの使用をやめ Dockerfileをビルドして使用するように修正。
services:
    php:
      # image: php:8.3-apache
      build: .
      volumes:
        - ./www/html:/var/www/html
        - ./prophp_sample:/var/www/prophp_sample
        - ./php.ini-debug:/usr/local/etc/php/php.ini
        - ./prophp_sample.conf:/etc/apache2/conf-available/prophp_sample.conf
      extra_hosts:
        - "host.docker.internal:host-gateway"
      ports:
        - "8080:80"
      command: >
        sh -c "a2enconf prophp_sample && apache2-foreground"
   :

以下の記事は上記を踏まえて修正
PHP 学習:プロになるためのPHPプログラミング入門 サンプル環境構築

エラー その2

上記対応後の実行結果:
Fatal error: Uncaught mysqli_sql_exception: No such file or directory in /var/www/prophp_sample/www/ppa/p32mysql.php:4 Stack trace: #0 /var/www/prophp_sample/www/ppa/p32mysql.php(4): mysqli->__construct('localhost', 'ppguest', Object(SensitiveParameterValue), 'ppdb') #1 {main} thrown in /var/www/prophp_sample/www/ppa/p32mysql.php on line 4

GoF:Stateパターン

公開:2026.06.05(金) 07:31

Stateパターン

オブジェクトの内部状態に応じて振る舞いを変更するデザインパターンです。IfやSelect Caseによる複雑な条件分岐をクラスの切り替えで表現できるため、コードの可視性や保守性が向上します。

構成要素

State(状態)
状態ごとの振る舞いを定義するインターフェース

ConcreteState(具象状態)
各状態における実際の処理を記述するクラス

Context(文脈)
現在の状態を表すオブジェクトを保持し、操作を実行するクラス

メリット

条件分岐の排除
IfやSelect Caseが減るため、新しい状態を追加する際に既存のコードに影響を与えない (開拓閉鎖の原則)。

責務の分離
「状態の管理」と「その状態での処理」が別クラスに分割されるため、それぞれのコードが簡潔になる。

Visual Basic(VB.NET)実装例

オブジェクトが「通常 (Normal)」と「特別 (Special)」の2つの状態を持つ場合の実装例
Imports System

' 1. State(状態)インターフェース
Public Interface IState
    Sub Handle(context As Context)
End Interface

' 2. ConcreteState(具象状態)- 通常状態
Public Class NormalState
    Implements IState

    Public Sub Handle(context As Context) Implements IState.Handle
        Console.WriteLine("通常状態の処理を実行中...")
        ' 特別状態へ遷移するトリガー
        context.State = New SpecialState()
    End Sub
End Class

' 2. ConcreteState(具象状態)- 特別状態
Public Class SpecialState
    Implements IState

    Public Sub Handle(context As Context) Implements IState.Handle
        Console.WriteLine("★特別状態の処理を実行中★")
        ' 通常状態へ遷移するトリガー
        context.State = New NormalState()
    End Sub
End Class

' 3. Context(文脈)クラス
Public Class Context
    ' 現在の状態を保持
    Public Property State As IState

    Public Sub New(initialState As IState)
        Me.State = initialState
    End Sub

    ' 状態に応じた処理を実行
    Public Sub Request()
        State.Handle(Me)
    End Sub
End Class

' --- 実行例 ---
Module Module1
    Sub Main()
        ' 初期状態を「通常」に設定
        Dim context As New Context(New NormalState())

        ' 処理を呼び出す(状態が自動で切り替わる)
        context.Request() ' 通常処理 -> 特別状態へ遷移
        context.Request() ' 特別処理 -> 通常状態へ遷移
        context.Request() ' 通常処理 -> 特別状態へ遷移
    End Sub
End Module


英語:2026.06.04(木)


2026.06.04(木)

WSN Daily より

The four Republicans who broke with Trump on the Iran war

イラン戦争に関してトランプ氏と意見を異にした4人の共和党員

Republicans - 4人の共和党員
who broke with Trump - トランプ氏と決別した人物
on the Iran war - イラン戦争について


その他の記事