PHP の今とこれからLightweight Language Saturday
2003 年 8 月 9 日
ＰＨＰの歩みプログラミング言語としてのＰＨＰＰＨＰ５の話

日本 PHP ユーザ会
廣川 類
<hirokawa@php.gr.jp>

本資料の再配布及び転用について
本プレゼンテーション資料の著作権は一部の画像データを除き著者（廣川）が保有します。
本資料の再配布は自由ですが、雑誌・書籍へ直接転載を行なう際には著者にご連絡下さい。

ＰＨＰとは？
PHP: Hypertext Preprosessor
 Web アプリケーション構築用のスクリプト言語
 HTML ブロックの中にコードを埋め込む

http://localhost/hello.php?name=Taro

POST,GET,Cookie 変数は自動的に変数に変換される。

hello.php<html><head><title>test page</title></head><body><?php
echo “Hello, {$_GET[‘name’]}”;?></body></html>

Hello, Taro

エラー発生時は該当行を表示

PHP の特徴
習得が容易で使い易い（いろんな言語の良いとこどり）
 高機能（データベース接続 , ＸＭＬ，ＰＤＦ , イメージ）
LAMP (Linux + Apache + MySQL + PHP/Perl/Python) マルチプラットフォーム：主要な OS/Web サーバに対応 ユーザ関数やクラスによる機能拡張が可能→有用な機能の共有化： 標準ライブラリ ＰＥＡＲ

Ｗｅｂアプリケーションでのみ使用される
 オブジェクトのサポートが貧弱（大規模アプリに向かない？） （使用方法を誤ると）セキュリティ上の問題を発生し易い
 ＤＢコネクションプーリング未サポート（ WAS に比べて劣る）
Zend Accelerator

ＰＨＰの構造Web
Browser
Zend Add-in

Zend
Optimizer
Zend
Accelerator
Zend
Encoder

ServerAPI

Apache 1/2
AOL Server
IIS
CGI, CLI

Zend Engine

Thread Safe
Resource
Manager
Function ModuleInterface
Executer
Runtime Compiler

ModulesAPI

PostgreSQLMySQL, MSSQL
Oracle, IBM DB2
ODBC
LDAP

PDF

IMAPXMLImage

JavaRDBMS

regex

PHP Script
Class LibraryPEAR

PHP の歩み

Domains(netcraft)

15,0001995

Rasmus Lerdorf により PHP/FI 開発

1996

PHP/FI 日本語 Web ページ , 日本語 ML
PHP/FI 日本語マニュアル ,PHP/FI 日本語パッチ

1997

PHP3 開発（新開発体制へ移行）

1998

PHP3 日本語マニュアル作成プロジェクト
PHP3 日本語パッチ

1999

PHP 国際化プロジェクト開始

PHP/FI2
PHP350,000

150,000「 PHP 徹底攻略」出版
2000
2001
2002

日本 PHP ユーザ会設立
PHP4 リリース： ZendEngine による性能向上

PHP4PHP 4.0.6 ： 日本語対応マージ
PHP 4.1 : メソッド毎の入力取得 , マルチバイト正規表現PHP 4.2 : register_global=Off がデフォルトに

2003
2004

PHP 4.3 : マルチバイト対応強化（ＣＪＫ、スクリプト文字コード）（ PHP 5 : オブジェクト機能強化： ZE2 ）PHP52,000,000

全ドメインの 30%
Apache の 50%
12,000,000

日本 PHP ユーザー会
2000/4 Linux Conference 2000 にて設立記者会見

設立趣旨
PHP ユーザ相互の情報交換およびコミュニティの健全な発展
背景• 高性能 Web ミドルウエアへのニーズ増大• オープンソースソフトウエアの発展

国内 PHP ユーザの増加

FAQ
どうやって会員になるの？

活動内容 (WG)
Web
http://www.php.gr.jp/

メーリングリスト
プロジェクト別 ML
ドキュメント整備
マニュアル、 FAQ
セミナー・イベント
無償セミナ等
国際化
PHP の国際化等
テスト
大規模負荷テスト等

ＰＨＰの言語としての特徴
Perl 、 Java 、 C に似た記述→親しみやすく、習熟容易

Web アプリにフォーカス → ユーザ入力（ POST,GET,Cookie ）自動取得



弱い型付けの言語： 動的に型を決定

変数スコープ： グローバル , 関数内 , クラス内
( 名前空間は PHP5 でも対応せず？ )

文字列処理： 多くの関数 , ヒアドキュメント , ‘.’ による結合

正規表現： POSIX 互換、 Perl 互換、マルチバイト対応版（ fromRuby ）

例外処理： ＡＰＩに依存 （ try … catch PHP5 で対応）

オブジェクト指向： 基本的なサポートのみ

Ｗｅｂ環境とマルチバイト文字処理
内部→出力エンコーディング
charset 設定・メール送信
クライアント

出力データ

エンコーディング変換
マルチバイト文字列処理
・正規表現

出力バッファ
入力データ

入力パーサ
エンコーディング判別→ 内部エンコーディン
グ

コード実行
コンパイラ
ローダ

PHP スクリプト

関数 API
SQL/ データ

外部リソース（ RDBMS 等）
エンコーディング判別→ 内部エンコーディング

PHP と他の言語の関係
習得の容易さＶＢ
PHP4PHP5Ｐｅｒｌsh

Ruby
Python

平易さを失わずにオブジェクト指向を取り入れ、エンタープライズ用途に対応

Ｊａｖａオブジェクト指向

PHP 環境の強化


Ｗｅｂアプリ以外の用途へ






コマンドライン版
ＧＵＩ （ＰＨＰ－ＧＴＫ）
php-embed (myphp)
Ｗｅｂサービス / メッセージング（ＳＯＡＰ、 XML-RPC ）性能・開発効率の改善

統合環境： Zend Studio 、 Eclipse 、 etc.
Web テンプレート： Smarty
Ｗｅｂキャッシュ： コンパイル後のコードをメモリ保持
標準ライブラリの整備： PEAR/PECLPHP5 へ











スクリプトエンジン： ZendEngine2 に更新
オブジェクト指向機能の大幅強化( 名前空間の追加 )例外処理の追加 :try ～ throw ～ catch
XML 対応強化： expat から libxml2 へストリームＡＰＩ強化
外部オブジェクト (Java 等 ) のオーバーロードが容易に
PHP4 と上位互換 : クラス関連一部非互換
リリースは 2003 年末？ （ＰＥＡＲ対応等課題も多い）
マルチバイト対応：鬼車採用、文字コード変換エンジン独立化

PHP5 のオブジェクト指向強化







値渡し→参照渡し
プロパティ・メソッドへのアクセス制限
public, private, protected （従来は var=public のみ）
クラス変数、クラス定数
仕様・実装の分離： interface, implements
オーバーライドの制限： final
コンストラクタ名の統一（従来はクラス名）： __construct()
デストラクタ追加（従来はリソース開放のみ）： __destruct()
プロパティのオーバーローディング： __set(),__get()
メソッドのオーバーローディング： __call()デモ

Ｄｅｍｏ．．．

まとめPHP5 になっても初心者に優しいスクリプト言語であり続けられれば、Ｗｅｂアプリ構築用言語の定番を維持・発展できる。

オブジェクト指向対応でエンタープライズ用途に使用される→ 負荷テスト等で実績・ノウハウを積み上げる
（参考）






PHP 本家
http://www.php.net/
日本 PHP ユーザ会
http://www.php.gr.jp/「オブジェクト指向言語に生まれ変わる PHP5 」（ by 小山さん）
http://www.atmarkit.co.jp/flinux/special/php5/
Do You php? (by 下岡さん )http://www.pat.hi-ho.ne.jp/dimension/
廣川作成の PHP 関連ページ
http://www.geocities.jp/rui_hirokawa/php/