寝起きで改良。
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) } } }