> On 14 Apr 2015, at 07:31, Alexey Zakhlestin <[email protected]> wrote:
>
> Feels a bit hackish
> I think it is possible to introduce an overall better solution
>
> We can expose result of json-tokenizing as a tree of objects:
>
> JSON\Object
> JSON\Array
> JSON\String
> JSON\Number
> JSON\False
> JSON\True
> JSON\Null
>
> then, it would be possible to introduce any number of experimental userland
> implementations like the one proposed here
I decided to elaborate
<?php
namespace JSON;
abstract class Value
{
public function toJson();
public function toNative(); // this would do, whatever json_decode does
}
class Object extends Value implements \ArrayAccess, \IteratorAggregate
{
}
class Array extends Value implements \ArrayAccess, \IteratorAggregate
{
}
abstract class Literal extends Value
{
public function toString();
public function __toString()
{
return $this->toString();
}
}
class String extends Literal
{
}
class Number extends Literal
{
public function toInt();
public function toFloat();
}
class False extends Literal
{
}
class True extends Literal
{
}
class Null extends Literal
{
}
So, in case of Number, there would be a way to get the value the way it was
stored in document using toString(), use toInt() or toFloat() to get a value
with possible precision loss or use toNative(), which would be “smart” and
return int or float using the same logic, which json_decode() uses now.
It would work the other way round too. Object::toJson() would return
json-representation of the tree.
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php