> On 14 Apr 2015, at 07:31, Alexey Zakhlestin <indey...@gmail.com> 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

Reply via email to