寝起きで改良。
IoObject→zvalの変換ができるようにして、IoState::doCString()の戻り値を取得できるようにしました。
対応する型はこれだけです。他の型は文字列で <IoObject:name:address> となります。
| Io | PHP |
|---|---|
| nil | null |
| true | true |
| false | false |
| Number | double |
| Sequence | string |
| List | array |
| Map | array |
サンプル:
<?php $io = new IoState(); var_dump($io->doCString('"Hello, World!" println')); var_dump($io->doCString('1'), $io->doCString('nil'), $io->doCString('true'), $io->doCString('false')); var_dump($io->doCString('arr := list(1,2,3)')); var_dump($io->doCString('arr append(arr clone)')); /* 'arr append(arr)' does not work! */ var_dump($io->doCString( 'dict := Map clone do ( atPut("foo", "bar") atPut("baz", "qux") atPut("quux", arr) )'));
出力: (行数を節約するために少し加工しています)
Hello, World!
string(13) "Hello, World!"
float(1)
NULL
bool(true)
bool(false)
array(3) {
[0]=>float(1)
[1]=>float(2)
[2]=>float(3)
}
array(4) {
[0]=>float(1)
[1]=>float(2)
[2]=>float(3)
[3]=>array(3) {
[0]=>float(1)
[1]=>float(2)
[2]=>float(3)
}
}
array(3) {
["foo"]=>string(3) "bar"
["baz"]=>string(3) "qux"
["quux"]=>array(4) {
[0]=>float(1)
[1]=>float(2)
[2]=>float(3)
[3]=>array(3) {
[0]=>float(1)
[1]=>float(2)
[2]=>float(3)
}
}
}