狠狠撸

狠狠撸Share a Scribd company logo
モダンPHP テクニック12 選
―PsalmとPHP 8.1で今はこんなこともできる!―
五十嵐進士(sji)
自己紹介
sji / sj-i / @sji_ch
SNS 上でのアイコンはGitHub が自
動生成した奴
生まれも育ちも仙台
PHP カンファレンス仙台とかやった
ふつうのサラリーマン
株式会社インフィニットループ仙台
支社所属
スマホゲーのサーバサイドプログラ
マ
その他
一昨年娘ができた
かわいい
WEB+DB PRESS の現PHP 連載担当
12/24(金)発売の126号はPHP
8.1 の紹介
Agenda
PHP の今について
モダンなPHP のテクニック12 个くらい绍介
PHP の今
PHP 8.1 が出た
型の表現力が強化され、扱いも更に厳格化
readonly
never
交差型
Enum、などなど
Fiber で非同期処理が更に便利に
汎用言語化が更に進む
「ゆるふわPHP が汎用言語ですって?」
お前らPHPの型がゆるふわゆるふわ言うけど
な、PHPなら型を宣言した値が勝手にnullに
なったりしねーし
一部の言語、ここで血反吐をはき倒れる
ていうか、今のPHP はもうそんなにゆるふわ
でもないんです!
大静的型解析時代
型情報を使う静的解析ツールが隆盛
PHPStan
Psalm
Phan
静的解析ツールは言語の弱点を補うものとなりがり
PHP はゆるふわな型が弱点
ガチガチな静的解析ツールで補う
JetBrains の調査いわく
「どんな品質ツールを使っていますか」
PHPStan Psalm Phan 計
2019 9% 1% 5% 15%
2020 11% 3% 2% 16%
2021 18% 9% 2% 29%
「静的解析ツールを使ってますか」
はい いいえ なにそれ
2021 33% 38% 28%
https://www.jetbrains.com/lp/devecosystem-2019/php/
https://www.jetbrains.com/lp/devecosystem-2020/php/
https://www.jetbrains.com/lp/devecosystem-2021/php/
静的型解析の何が嬉しい?
実行しなくてもバグに気づける
PHP の言語自体を超えた型の表現力
エディタの補完やナビゲーションの強化
Psalm
Vimeo で使われている静的解析ツール
先日原作者は卒業した、が、今も活発に開発
比較的型の表現力が高い
ここから12 のワザを大紹介
1. クラスをボコボコ生やす
PHP でデータや処理に型をつける
最強の手段
言語機能やツールの恩恵を最大限に
得られる
Constructor Property Promotion
最高
ちょっとした処理や値の表現でもク
ラスを定義
class SomeThing

{

public function __construct(

public int $id,

public string $name,

public Dependency $obj,

) {

}

}
2. DI コンテナでautowiring
多くのDI コンテナで利用可能
Laravel のContainer やPHP-DI
など
コンストラクタへ依存クラスを並べ
ていくだけ
自分でnew するのはVO とかテスト
とかごく一部に
Laravel でもFacade よりDI
// DI コンテナが勝手に依存先を生成

public function __construct(

public readonly Dependency1 $obj1
public readonly Dependency2 $obj2
) {

}
3. 型は早めにつける
@varより@param
どんどん呼び出し元へ追いやる
結果コントローラなどリクエス
トの入口のほうに
誤りは早く検知できるほどよい
リリースの後より前
テスト環境よりCI
CI より手元のエディタ
リクエスト処理の後半より前半


// こっちより

public function f(array $items) {

/** @var Item $item */

foreach ($items as $item) {

}

}



// こっち

/** @param Item[] $items */

public function f(array $items) {

foreach ($items as $item) {

}

}
4. 静的解析可能な入力値検査
一部ライブラリで静的型検査フレ
ンドリーに入力値の検査やキャス
トが可能
webmozart/assert
azjezz/psl
cuyz/valinor
OpenAPI やJSON scheme などIDL
からのクラス自動生成も有効
// webmozart/assert の例

Assert::integer($id);

// $id はこの先 int 扱い



// azjezz/psl の例

$spec = Typeshape([

'id' => Typeint(),

'name' => Typestring(),

'age' => Typeoptional(

Typeint()

)

]);

// $input をバリデーションしつつキャスト

$input = $spec->coerce($_POST['input']
// $input はこの先で↓の扱い

// array{id: int, name: string, age?:
5. 静的解析可能なconfig
連想配列のかわりにValueObject を
使う
DI コンテナに登録して取り出すの
もよい
型の保護や補完が効く
名前付き引数を利用
順番の意識が不要に
設定項目の追加や削除なども静
的に検知可能
return new DatabaseConfiguration(

driver: new MySQLDriverConfiguration
host: 'localhost',

port: 3306,

db_name: 'test_db',

username: 'test',

password: 'mogera',

),

)
6. 静的解析可能なCollection を使う
最近illuminate/collections がジェネ
リクスに対応
doctrine/collections も以前からジェ
ネリクスに対応
PhpStorm もそれらのジェネリクス
にある程度対応
あかん場合は@varと@psalm-
ignore-varを併用


/** @param Collection<User> $users */

public function f(Collection $users)
foreach ($users as $user) {

// $user は User として型推論

}

}
7. 静的解析可能なOrm を使う
doctrine/orm
cycle/orm も2 系以降でいくらか
eloquent はlarave-pluginやアノテー
ション生成が必要
Orm を自作してでも静的解析に対
応させる
cuyz/valinor など既存hydrator
の利用も可
// $user は User|null と推論される

$user = $entityManager

->getRepository(User::class)

->find(1);
8. 静的解析可能な配列を使う
psalm の型アノテーションでは配
列のキーや値の型が指定可能
「連番の数値添字が0から順に並ん
だ配列」(list)も指定可能
non-empty-array やnon-empty-list
もある
Shapes で構造体的な配列やタプル
も宣言できる
/** @param array<ItemType> $p */

/** @param array<int, ItemType> $p */

/** @param list<ItemType> $p */

/** @param non-empty-array<ItemType> $p
/**

* @param array{

* id: int,

* name: string

* } $p 

*/

/** @param array{int, string} */
9. 静的解析可能な分岐網羅を使う
PHP 8.0 で入ったmatch は分岐網羅
検査がある
想定してない値が来ると例外
Psalm はdefault のないmatch や
switch で静的に分岐網羅を検査でき
る場合がある
値のUnion やEnum をうまく使う
無闇に可変関数呼び出しなどの動的
処理は使わない、愚直に分岐を書く
enum Result {

case Succeed;

case Failed;

}



// ResultStatus::Failed を網羅してないの
// 静的解析段階でエラーになる

function f(Result $status): int {

return match ($status) {

ResultStatus::Succeed => 1,

};

}
10. 書き込み、状態を減らす
PHP 8.1 でreadonly が追加
Psalm でも@immutable や@pure
などがある
なるべく完全コンストラクタ+不変
状態を持たない= 各生成時点で全情
報が必要
小さなクラスが増え神クラス化
も防ぎやすくなる
class ReadOnlyClass

{

public function __construct(

public readonly int $id,

public readonly string $name,

) {

}

}

/** @psalm-immutable */

class ImmutableClass

{

public function __construct(

public int $id,

public string $name,

) {

}

}
11. なるべく多くを型で表現
ValueObject 、DTO みたいなのをバ
ンバン作る
ID の種類ごとに異なるクラスを定
義する
ジェネリクスを使ってもよい
実クラスを定義しなくとも型
タグを使える
ちかぢか同僚が会社のブロ
グで紹介するかも
trait ItemId {

public function __construct(

public readonly int $value,

) {

}

}

class ConsumableItemId {use ItemId;}

class EquipmentItemId {use ItemId;}



class Consumableuser {

public function useItem(

ConsumableItemId $item_id

): void {

}

}
12. Package-By-Feature (に寄せる)
UserController
UserModel
UserView
ItemController
ItemModel
ItemView
CurrencyController
CurrencyModel
CurrencyView
User Item Currency
Package By Feature


UserModel
ItemModel
CurrencyModel
UserController
ItemController
CurrencyController
UserView
ItemView
CurrencyView
Model Controller View
Package By Layer
PBL (Package-By-Layer) へ寄せすぎない
?Controllerだけのディレクトリ
?Repositoryだけのディレクトリ
何が嬉しいのか
@psalm-internal がうまく機能するよう書く
13. みんな(会社を動かして)PHP
Foundation に寄付をするんだ
おしまい

More Related Content

What's hot (20)

ドメイン駆动设计サンプルコードの彻底解説
ドメイン駆动设计サンプルコードの彻底解説ドメイン駆动设计サンプルコードの彻底解説
ドメイン駆动设计サンプルコードの彻底解説
増田 亨
?
笔贬笔とシグナル、その里侧
笔贬笔とシグナル、その里侧笔贬笔とシグナル、その里侧
笔贬笔とシグナル、その里侧
do_aki
?
コンテナの作り方「顿辞肠办别谤は里方で何をしているのか?」
コンテナの作り方「顿辞肠办别谤は里方で何をしているのか?」コンテナの作り方「顿辞肠办别谤は里方で何をしているのか?」
コンテナの作り方「顿辞肠办别谤は里方で何をしているのか?」
Masahito Zembutsu
?
例外设计における大罪
例外设计における大罪例外设计における大罪
例外设计における大罪
Takuto Wada
?
搁贰厂罢蹿耻濒とは
搁贰厂罢蹿耻濒とは搁贰厂罢蹿耻濒とは
搁贰厂罢蹿耻濒とは
星影 月夜
?
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
?
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
?
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
?
こわくない Git
こわくない Gitこわくない Git
こわくない Git
Kota Saito
?
オブジェクト指向の设计と実装の学び方のコツ
オブジェクト指向の设计と実装の学び方のコツオブジェクト指向の设计と実装の学び方のコツ
オブジェクト指向の设计と実装の学び方のコツ
増田 亨
?
インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
インフラエンシ?ニアの綺丽て?优しい手顺书の书き方インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
Shohei Koyama
?
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
?
惭补驳颈肠翱苍颈辞苍~颁#でゲームサーバを开発しよう~
惭补驳颈肠翱苍颈辞苍~颁#でゲームサーバを开発しよう~惭补驳颈肠翱苍颈辞苍~颁#でゲームサーバを开発しよう~
惭补驳颈肠翱苍颈辞苍~颁#でゲームサーバを开発しよう~
torisoup
?
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
?
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
do_aki
?
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くしたNginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
toshi_pp
?
贵颈产别谤の使いどころ
贵颈产别谤の使いどころ贵颈产别谤の使いどころ
贵颈产别谤の使いどころ
Tomoya Kawanishi
?
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
Masakazu Matsushita
?
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
?
尝颈苍耻虫女子部 蝉测蝉迟别尘诲彻底入门
尝颈苍耻虫女子部 蝉测蝉迟别尘诲彻底入门尝颈苍耻虫女子部 蝉测蝉迟别尘诲彻底入门
尝颈苍耻虫女子部 蝉测蝉迟别尘诲彻底入门
Etsuji Nakai
?
ドメイン駆动设计サンプルコードの彻底解説
ドメイン駆动设计サンプルコードの彻底解説ドメイン駆动设计サンプルコードの彻底解説
ドメイン駆动设计サンプルコードの彻底解説
増田 亨
?
笔贬笔とシグナル、その里侧
笔贬笔とシグナル、その里侧笔贬笔とシグナル、その里侧
笔贬笔とシグナル、その里侧
do_aki
?
コンテナの作り方「顿辞肠办别谤は里方で何をしているのか?」
コンテナの作り方「顿辞肠办别谤は里方で何をしているのか?」コンテナの作り方「顿辞肠办别谤は里方で何をしているのか?」
コンテナの作り方「顿辞肠办别谤は里方で何をしているのか?」
Masahito Zembutsu
?
例外设计における大罪
例外设计における大罪例外设计における大罪
例外设计における大罪
Takuto Wada
?
搁贰厂罢蹿耻濒とは
搁贰厂罢蹿耻濒とは搁贰厂罢蹿耻濒とは
搁贰厂罢蹿耻濒とは
星影 月夜
?
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
?
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
?
こわくない Git
こわくない Gitこわくない Git
こわくない Git
Kota Saito
?
オブジェクト指向の设计と実装の学び方のコツ
オブジェクト指向の设计と実装の学び方のコツオブジェクト指向の设计と実装の学び方のコツ
オブジェクト指向の设计と実装の学び方のコツ
増田 亨
?
インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
インフラエンシ?ニアの綺丽て?优しい手顺书の书き方インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
Shohei Koyama
?
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
?
惭补驳颈肠翱苍颈辞苍~颁#でゲームサーバを开発しよう~
惭补驳颈肠翱苍颈辞苍~颁#でゲームサーバを开発しよう~惭补驳颈肠翱苍颈辞苍~颁#でゲームサーバを开発しよう~
惭补驳颈肠翱苍颈辞苍~颁#でゲームサーバを开発しよう~
torisoup
?
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
?
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
do_aki
?
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くしたNginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
toshi_pp
?
贵颈产别谤の使いどころ
贵颈产别谤の使いどころ贵颈产别谤の使いどころ
贵颈产别谤の使いどころ
Tomoya Kawanishi
?
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
?
尝颈苍耻虫女子部 蝉测蝉迟别尘诲彻底入门
尝颈苍耻虫女子部 蝉测蝉迟别尘诲彻底入门尝颈苍耻虫女子部 蝉测蝉迟别尘诲彻底入门
尝颈苍耻虫女子部 蝉测蝉迟别尘诲彻底入门
Etsuji Nakai
?

Similar to モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!― (20)

Osc2014
Osc2014Osc2014
Osc2014
Soudai Sone
?
笔贬笔の今とこれから2015
笔贬笔の今とこれから2015笔贬笔の今とこれから2015
笔贬笔の今とこれから2015
Rui Hirokawa
?
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
?
笔贬笔の今とこれから2017
笔贬笔の今とこれから2017笔贬笔の今とこれから2017
笔贬笔の今とこれから2017
Rui Hirokawa
?
笔贬笔の今とこれから2016
笔贬笔の今とこれから2016笔贬笔の今とこれから2016
笔贬笔の今とこれから2016
Rui Hirokawa
?
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
Rui Hirokawa
?
PHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxPHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptx
Hideo Kashioka
?
20090415 すばらしきSymfonyの世界へようこそ
20090415 すばらしきSymfonyの世界へようこそ20090415 すばらしきSymfonyの世界へようこそ
20090415 すばらしきSymfonyの世界へようこそ
Hiromu Shioya
?
PHP Now and then 2018 : WordPress Special Edition
PHP Now and then 2018 : WordPress Special EditionPHP Now and then 2018 : WordPress Special Edition
PHP Now and then 2018 : WordPress Special Edition
Rui Hirokawa
?
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
Hisateru Tanaka
?
RFC: "var" Deprecation
RFC: "var" DeprecationRFC: "var" Deprecation
RFC: "var" Deprecation
y-uti
?
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作ったPHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
Hironobu Saitoh
?
PHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るPHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見る
shinjiigarashi
?
PHPカンファレンス2016 初心者セッション
PHPカンファレンス2016 初心者セッションPHPカンファレンス2016 初心者セッション
PHPカンファレンス2016 初心者セッション
Hideo Kashioka
?
2009年の笔贬笔フレームワーク
2009年の笔贬笔フレームワーク2009年の笔贬笔フレームワーク
2009年の笔贬笔フレームワーク
Takuya Sato
?
8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室
Yusuke Ando
?
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
sasezaki
?
PHP4の今 ~日本語対応と最近のトピックス~
PHP4の今 ~日本語対応と最近のトピックス~PHP4の今 ~日本語対応と最近のトピックス~
PHP4の今 ~日本語対応と最近のトピックス~
Rui Hirokawa
?
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginerPhpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginer
Hideo Kashioka
?
NanoA
NanoANanoA
NanoA
Kazuho Oku
?
笔贬笔の今とこれから2015
笔贬笔の今とこれから2015笔贬笔の今とこれから2015
笔贬笔の今とこれから2015
Rui Hirokawa
?
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
?
笔贬笔の今とこれから2017
笔贬笔の今とこれから2017笔贬笔の今とこれから2017
笔贬笔の今とこれから2017
Rui Hirokawa
?
笔贬笔の今とこれから2016
笔贬笔の今とこれから2016笔贬笔の今とこれから2016
笔贬笔の今とこれから2016
Rui Hirokawa
?
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
Rui Hirokawa
?
PHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxPHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptx
Hideo Kashioka
?
20090415 すばらしきSymfonyの世界へようこそ
20090415 すばらしきSymfonyの世界へようこそ20090415 すばらしきSymfonyの世界へようこそ
20090415 すばらしきSymfonyの世界へようこそ
Hiromu Shioya
?
PHP Now and then 2018 : WordPress Special Edition
PHP Now and then 2018 : WordPress Special EditionPHP Now and then 2018 : WordPress Special Edition
PHP Now and then 2018 : WordPress Special Edition
Rui Hirokawa
?
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
Hisateru Tanaka
?
RFC: "var" Deprecation
RFC: "var" DeprecationRFC: "var" Deprecation
RFC: "var" Deprecation
y-uti
?
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作ったPHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
Hironobu Saitoh
?
PHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るPHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見る
shinjiigarashi
?
PHPカンファレンス2016 初心者セッション
PHPカンファレンス2016 初心者セッションPHPカンファレンス2016 初心者セッション
PHPカンファレンス2016 初心者セッション
Hideo Kashioka
?
2009年の笔贬笔フレームワーク
2009年の笔贬笔フレームワーク2009年の笔贬笔フレームワーク
2009年の笔贬笔フレームワーク
Takuya Sato
?
8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室
Yusuke Ando
?
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
sasezaki
?
PHP4の今 ~日本語対応と最近のトピックス~
PHP4の今 ~日本語対応と最近のトピックス~PHP4の今 ~日本語対応と最近のトピックス~
PHP4の今 ~日本語対応と最近のトピックス~
Rui Hirokawa
?
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginerPhpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginer
Hideo Kashioka
?

Recently uploaded (6)

永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
Matsushita Laboratory
?
2025 04 Dayne
2025 04 Dayne2025 04 Dayne
2025 04 Dayne
arts yokohama
?
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアルLoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
CRI Japan, Inc.
?
ダイアグラム思考冲驰耻尘别尘颈.驳谤辞飞冲読书シェア会2025冲3冲26.辫辫迟虫
ダイアグラム思考冲驰耻尘别尘颈.驳谤辞飞冲読书シェア会2025冲3冲26.辫辫迟虫ダイアグラム思考冲驰耻尘别尘颈.驳谤辞飞冲読书シェア会2025冲3冲26.辫辫迟虫
ダイアグラム思考冲驰耻尘别尘颈.驳谤辞飞冲読书シェア会2025冲3冲26.辫辫迟虫
ssuserfcafd1
?
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアルLoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
CRI Japan, Inc.
?
Guidance for beginners and experts on how to set up a Windows driver developm...
Guidance for beginners and experts on how to set up a Windows driver developm...Guidance for beginners and experts on how to set up a Windows driver developm...
Guidance for beginners and experts on how to set up a Windows driver developm...
Atomu Hidaka
?
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
Matsushita Laboratory
?
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアルLoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
CRI Japan, Inc.
?
ダイアグラム思考冲驰耻尘别尘颈.驳谤辞飞冲読书シェア会2025冲3冲26.辫辫迟虫
ダイアグラム思考冲驰耻尘别尘颈.驳谤辞飞冲読书シェア会2025冲3冲26.辫辫迟虫ダイアグラム思考冲驰耻尘别尘颈.驳谤辞飞冲読书シェア会2025冲3冲26.辫辫迟虫
ダイアグラム思考冲驰耻尘别尘颈.驳谤辞飞冲読书シェア会2025冲3冲26.辫辫迟虫
ssuserfcafd1
?
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアルLoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
CRI Japan, Inc.
?
Guidance for beginners and experts on how to set up a Windows driver developm...
Guidance for beginners and experts on how to set up a Windows driver developm...Guidance for beginners and experts on how to set up a Windows driver developm...
Guidance for beginners and experts on how to set up a Windows driver developm...
Atomu Hidaka
?

モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―