2016年9月30日 星期五

像 Java 一样强类型,像 PHP 一样简单

最近由于一直在用 DRPC 和后台的 Java 端进行通信,所以找了不少方法来解决数据通信时候的强类型问题。
在 laravel 中有一个很厉害的类,能实现像 model 一样的数组 + 对象两种方式访问的功能,并且还能转换成 array 和 json。
use Illuminate\Support\Fluent;
就是继承以上这个类。 来做个演示
class XXXRequest extends \Illuminate\Support\Fluent
{
    protected $attributes = [
        'fieldID'          => '', 
        'fieldTitle'       => '', 
        'fieldContent'     => '', 
    ];

    public function __construct($attributes = [])
    {
        foreach ($attributes as $key => $value) {
            if (array_key_exists($key, $this->attributes)) {
                $this->attributes[$key] = $value;
            }
        }
    }

    public function __set($key, $value)
    {
        if (array_key_exists($key, $this->attributes)) {
            $this->attributes[$key] = $value;
        }
    }

    public function offsetUnset($offset)
    {

    }

    public function toArray()
    {
        array_walk($this->attributes, function(&$item, $key){

            //java 端只识别字符串和bool
            $item = is_bool($item) ? $item: (string) $item;
        });

        return $this->attributes;
    }

    public function toJson($options = JSON_UNESCAPED_UNICODE)
    {
        return json_encode($this->toArray(), $options);
    }
}
以上就是我和 java 的 DRPC 通信时候所用的请求对象, 这个类能直接像数组一样访问,并且可以带有各种对象功能。 在发送通信的时候只要直接 $xxx->toJson(); 就可以放心的把一个健壮的 Json 直接发送给 java 端,然后 java 端也可以安全的读取。 其他的功能,读者可以自己发掘。
Fluent 这个类就是实现了 ArrayAccess

from : http://laravel.so/tricks/6df11571b6d32e55dcbbe89845ce7fff

沒有留言:

wibiya widget