|
%!s(int64=8) %!d(string=hai) anos | |
---|---|---|
.. | ||
src | %!s(int64=8) %!d(string=hai) anos | |
tests | %!s(int64=8) %!d(string=hai) anos | |
.gitignore | %!s(int64=8) %!d(string=hai) anos | |
.gitmodules | %!s(int64=8) %!d(string=hai) anos | |
LICENSE | %!s(int64=8) %!d(string=hai) anos | |
README.ja.md | %!s(int64=8) %!d(string=hai) anos | |
README.md | %!s(int64=8) %!d(string=hai) anos | |
apigen.neon | %!s(int64=8) %!d(string=hai) anos | |
composer.json | %!s(int64=8) %!d(string=hai) anos | |
phpunit.xml | %!s(int64=8) %!d(string=hai) anos |
English / 日本語
Web IDL 第2版の型に沿うように、与えられた値をキャストするユーティリティクラスを提供し、PHP のタイプヒンティングを補助します。
当ライブラリは、タイプヒンティング補助API、また Web IDL で定義されている例外を PHP から利用できるようにします。 当ライブラリは Web 標準 API の実装者向けであり、PHP プロジェクトからの直接利用は想定していません。
作成したライブラリと同時に当ライブラリをインストールしてもらうには、
ライブラリのcomposer.jsonのrequireプロパティに、以下のように "esperecyan/webidl": "^1.3.1"
を追加します。
{
"name": "esperecyan/url",
"description": "Makes the algorithms and APIs defined by URL Standard available on PHP.",
"require": {
"php": ">=5.5",
"esperecyan/webidl": "^1.3.1"
},
"autoload": {
"psr-4": {
"esperecyan\\url\\": "src/"
}
},
}
Composer について詳しくは、Composerドキュメントをご覧ください。
<?php
require_once 'vendor/autoload.php';
use esperecyan\webidl\TypeHinter;
use esperecyan\webidl\DOMException;
class EventTarget
{
private $eventListeners = [];
public function addEventListener($type, $callback, $capture = false)
{
$listener = [
'type' => TypeHinter::to('DOMString', $type, 0),
'callback' => TypeHinter::to('EventListener?', $callback, 1, [
'EventListener' => 'single operation callback interface',
]),
'capture' => TypeHinter::to('boolean', $type, 2),
];
if (!is_null($listener->callback) && !in_array($listener, $this->eventListeners, true)) {
$this->eventListeners[] = $listener;
}
}
}
(new EventTarget())->addEventListener('load', 'invalid argument');
上の例を実行すると、以下のような連結された例外が投げ出されます。
実際の使用例は、esperecyan/urlのソースコードを参照してください。
いずれも静的メソッドで、クラスに属するメソッドから呼び出す必要があります。
指定された値を、指定された IDL 型に沿うよう変換して返します。 キャストできない値だった場合、メソッド名などを含むメッセージを含むDomainException、またはInvalidArgumentExceptionを投げ出します。
$type
IDL 型 (例: USVString
) を指定します。
esperecyan\webidl\TypeError
) を指定します。
なお、先頭のバックスラッシュは不要です。[EnforceRange]
拡張属性、または [Clamp]
拡張属性も指定可能です (例: [Clamp] octet
) 。(Node or DOMString)
) などを含むほとんどの型に対応していますが、一部異なる部分があります。
型の対応表を参照してください。$value
変換したい値を指定します。
$argNum = 0
変換対象の値が、 0から数えて 何番目の引数で受け取ったか指定します。 この引数値は例外メッセージに使用されます。 呼び出し元のメソッドが __set() の場合、この指定は無視されます。
$pseudoType = []
callback interface 型、列挙型、callback 関数型、または dictionary 型の識別子 ($type の中で指定した文字列) をキーとした連想配列を指定します。 キーに対応する値は、型に応じて以下のような構造を取ります。
[
'callback interface 型名' => 'callback interface',
'単一演算 callback interface 型名' => 'single operation callback interface',
'callback 関数型名' => 'callback function',
'列挙型名A' => ['文字列の', '配列'],
'列挙型名B' => 'SplEnumを継承したクラスの完全修飾名',
'dictionary 型名' => [
'メンバキーA' => [
'type' => '型名',
'default' => '既定値',
],
'メンバキーB' => [
'type' => '型名',
'required' => true,
],
],
]
読み取り専用プロパティであることを示すメッセージを含む例外を投げ出します。 __set() メソッドの中から呼び出す必要があります。
private、または protected が指定されたプロパティに代入しようとしていたときは致命的なエラーを発生させ、 存在しないプロパティに代入しようとしていたときは public プロパティとして新規作成します。 __set() メソッドの中から呼び出す必要があります。
private、または protected が指定されたプロパティの値を取得しようとしていたときは致命的なエラーを、 存在しないプロパティの値を取得しようとしていたときは警告を発生させます。 __get() メソッドの中から呼び出す必要があります。
Web IDL | PHP | 追記事項 |
---|---|---|
boolean | 論理値 | |
byte octet short unsigned short long |
整数 | |
unsigned long | 整数|浮動小数点数 | 32bit 版 PHPと Windows 版 PHP では、 −2147483648 より小さい数と 2147483647 より大きい数は浮動小数点数。 |
long long | 整数|浮動小数点数 | −9223372036854775808 〜 9223372036854775807。 ただし 32bit 版 PHP と Windows 版 PHP では −9007199254740991 〜 9007199254740991 であり、 −2147483648 より小さい数と 2147483647 より大きい数は浮動小数点数。 |
unsigned long long | 整数|浮動小数点数 | 0 〜 9223372036854775807。 ただし 32bit 版 PHP と Windows 版 PHP では 0 〜 9007199254740991 であり、 2147483647 より大きい数は浮動小数点数。 |
float *1 unrestricted float *1 double unrestricted double |
浮動小数点数 | float 、unrestricted float は、double 、unrestricted double のエイリアス。 |
DOMString USVString |
文字列 | 妥当な UTF-8 文字列。 |
ByteString | 文字列 | |
object | オブジェクト | |
interface型 | オブジェクト|Callable | 単一演算 callback interface なら、 Callable の場合がある。 |
dictionary型 | 配列 | $pseudoType で指定した構造に合致する配列。 |
列挙型 | 文字列 | $pseudoType で指定した配列の要素、 またはクラスの定数値。 |
callback関数型 | Callable | |
sequence 配列 *2 凍結配列型 |
配列 | 新しい配列。 |
promise型 | 非対応。 代わりに完全修飾形式のクラス名、 またはインターフェース名 (例: React\Promise\PromiseInterface ) を指定。 |
|
共用体型 | mixed | UnionType::toUnion() の戻り値。 |
RegExp | 文字列 | UTF-8 の文字列であり、 デリミタで囲まれた正しい PCRE のパターン。 e修飾子 は不正とみなされる。 |
Error | esperecyan\webidl\Error | |
DOMException | DOMException | |
buffer source型 | 非対応。 代わりに完全修飾形式のクラス名、 またはインターフェース名を指定。 | |
OpenEndedDictionary<T> | 未対応。 |
*1 float は Web IDL 第2版 で推奨されない。非推奨。
*2 配列は Web IDL 第2版 で廃止 (heycam/webidl@079cbb8)。非推奨。
Web IDL | PHP |
---|---|
Error | esperecyan\webidl\Errorインターフェース (このエラー名の例外を作成する場合は new esperecyan\webidl\lib\Error('エラーメッセージ') ) |
EvalError | esperecyan\webidl\EvalErrorクラス |
RangeError | esperecyan\webidl\RangeErrorクラス |
ReferenceError | esperecyan\webidl\ReferenceErrorクラス |
TypeError | esperecyan\webidl\TypeErrorクラス |
URIError | esperecyan\webidl\URIErrorクラス |
DOMException | esperecyan\webidl\DOMExceptionクラス |
git checkout -b my-new-feature
git commit -am 'Add some feature'
git push origin my-new-feature
もしくは
Issue を作成します
README や Doc コメントの英文の間違い、またテストの不備などを見つけたら、Pull Request や Issue などからご連絡ください。 README の翻訳も歓迎いたします。
ライブラリの作成に当たり、Web IDL (第2版 — 日本語訳)を参考にさせていただきました。
READMEの英訳をハダーさんに協力していただきました。
当ライブラリのライセンスは Mozilla Public License Version 2.0 (MPL-2.0) です。