You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
190 lines
3.8 KiB
190 lines
3.8 KiB
2 years ago
|
package php_serialize
|
||
|
|
||
|
const (
|
||
|
TOKEN_NULL rune = 'N'
|
||
|
TOKEN_BOOL rune = 'b'
|
||
|
TOKEN_INT rune = 'i'
|
||
|
TOKEN_FLOAT rune = 'd'
|
||
|
TOKEN_STRING rune = 's'
|
||
|
TOKEN_ARRAY rune = 'a'
|
||
|
TOKEN_OBJECT rune = 'O'
|
||
|
TOKEN_OBJECT_SERIALIZED rune = 'C'
|
||
|
TOKEN_REFERENCE rune = 'R'
|
||
|
TOKEN_REFERENCE_OBJECT rune = 'r'
|
||
|
TOKEN_SPL_ARRAY rune = 'x'
|
||
|
TOKEN_SPL_ARRAY_MEMBERS rune = 'm'
|
||
|
|
||
|
SEPARATOR_VALUE_TYPE rune = ':'
|
||
|
SEPARATOR_VALUES rune = ';'
|
||
|
|
||
|
DELIMITER_STRING_LEFT rune = '"'
|
||
|
DELIMITER_STRING_RIGHT rune = '"'
|
||
|
DELIMITER_OBJECT_LEFT rune = '{'
|
||
|
DELIMITER_OBJECT_RIGHT rune = '}'
|
||
|
|
||
|
FORMATTER_FLOAT byte = 'g'
|
||
|
FORMATTER_PRECISION int = 17
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
debugMode = false
|
||
|
)
|
||
|
|
||
|
func Debug(value bool) {
|
||
|
debugMode = value
|
||
|
}
|
||
|
|
||
|
func NewPhpObject(className string) *PhpObject {
|
||
|
return &PhpObject{
|
||
|
className: className,
|
||
|
members: PhpArray{},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type SerializedDecodeFunc func(string) (PhpValue, error)
|
||
|
|
||
|
type SerializedEncodeFunc func(PhpValue) (string, error)
|
||
|
|
||
|
type PhpValue interface{}
|
||
|
|
||
|
type PhpArray map[PhpValue]PhpValue
|
||
|
|
||
|
type PhpSlice []PhpValue
|
||
|
|
||
|
type PhpObject struct {
|
||
|
className string
|
||
|
members PhpArray
|
||
|
}
|
||
|
|
||
|
func (self *PhpObject) GetClassName() string {
|
||
|
return self.className
|
||
|
}
|
||
|
|
||
|
func (self *PhpObject) SetClassName(name string) *PhpObject {
|
||
|
self.className = name
|
||
|
return self
|
||
|
}
|
||
|
|
||
|
func (self *PhpObject) GetMembers() PhpArray {
|
||
|
return self.members
|
||
|
}
|
||
|
|
||
|
func (self *PhpObject) SetMembers(members PhpArray) *PhpObject {
|
||
|
self.members = members
|
||
|
return self
|
||
|
}
|
||
|
|
||
|
func (self *PhpObject) GetPrivate(name string) (v PhpValue, ok bool) {
|
||
|
v, ok = self.members["\x00"+self.className+"\x00"+name]
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func (self *PhpObject) SetPrivate(name string, value PhpValue) *PhpObject {
|
||
|
self.members["\x00"+self.className+"\x00"+name] = value
|
||
|
return self
|
||
|
}
|
||
|
|
||
|
func (self *PhpObject) GetProtected(name string) (v PhpValue, ok bool) {
|
||
|
v, ok = self.members["\x00*\x00"+name]
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func (self *PhpObject) SetProtected(name string, value PhpValue) *PhpObject {
|
||
|
self.members["\x00*\x00"+name] = value
|
||
|
return self
|
||
|
}
|
||
|
|
||
|
func (self *PhpObject) GetPublic(name string) (v PhpValue, ok bool) {
|
||
|
v, ok = self.members[name]
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func (self *PhpObject) SetPublic(name string, value PhpValue) *PhpObject {
|
||
|
self.members[name] = value
|
||
|
return self
|
||
|
}
|
||
|
|
||
|
func NewPhpObjectSerialized(className string) *PhpObjectSerialized {
|
||
|
return &PhpObjectSerialized{
|
||
|
className: className,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type PhpObjectSerialized struct {
|
||
|
className string
|
||
|
data string
|
||
|
value PhpValue
|
||
|
}
|
||
|
|
||
|
func (self *PhpObjectSerialized) GetClassName() string {
|
||
|
return self.className
|
||
|
}
|
||
|
|
||
|
func (self *PhpObjectSerialized) SetClassName(name string) *PhpObjectSerialized {
|
||
|
self.className = name
|
||
|
return self
|
||
|
}
|
||
|
|
||
|
func (self *PhpObjectSerialized) GetData() string {
|
||
|
return self.data
|
||
|
}
|
||
|
|
||
|
func (self *PhpObjectSerialized) SetData(data string) *PhpObjectSerialized {
|
||
|
self.data = data
|
||
|
return self
|
||
|
}
|
||
|
|
||
|
func (self *PhpObjectSerialized) GetValue() PhpValue {
|
||
|
return self.value
|
||
|
}
|
||
|
|
||
|
func (self *PhpObjectSerialized) SetValue(value PhpValue) *PhpObjectSerialized {
|
||
|
self.value = value
|
||
|
return self
|
||
|
}
|
||
|
|
||
|
func NewPhpSplArray(array, properties PhpValue) *PhpSplArray {
|
||
|
if array == nil {
|
||
|
array = make(PhpArray)
|
||
|
}
|
||
|
|
||
|
if properties == nil {
|
||
|
properties = make(PhpArray)
|
||
|
}
|
||
|
|
||
|
return &PhpSplArray{
|
||
|
array: array,
|
||
|
properties: properties,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type PhpSplArray struct {
|
||
|
flags int
|
||
|
array PhpValue
|
||
|
properties PhpValue
|
||
|
}
|
||
|
|
||
|
func (self *PhpSplArray) GetFlags() int {
|
||
|
return self.flags
|
||
|
}
|
||
|
|
||
|
func (self *PhpSplArray) SetFlags(value int) {
|
||
|
self.flags = value
|
||
|
}
|
||
|
|
||
|
func (self *PhpSplArray) GetArray() PhpValue {
|
||
|
return self.array
|
||
|
}
|
||
|
|
||
|
func (self *PhpSplArray) SetArray(value PhpValue) {
|
||
|
self.array = value
|
||
|
}
|
||
|
|
||
|
func (self *PhpSplArray) GetProperties() PhpValue {
|
||
|
return self.properties
|
||
|
}
|
||
|
|
||
|
func (self *PhpSplArray) SetProperties(value PhpValue) {
|
||
|
self.properties = value
|
||
|
}
|