# File lib/php_serialize.rb, line 83
        def PHP.serialize(var, assoc = false) # {{{
                s = ''
                case var
                        when Array
                                s << "a:#{var.size}:{"
                                if assoc and var.first.is_a?(Array) and var.first.size == 2
                                        var.each { |k,v|
                                                s << PHP.serialize(k) << PHP.serialize(v)
                                        }
                                else
                                        var.each_with_index { |v,i|
                                                s << "i:#{i};#{PHP.serialize(v)}"
                                        }
                                end

                                s << '}'

                        when Hash
                                s << "a:#{var.size}:{"
                                var.each do |k,v|
                                        s << "#{PHP.serialize(k)}#{PHP.serialize(v)}"
                                end
                                s << '}'

                        when Struct
                                # encode as Object with same name
                                s << "O:#{var.class.to_s.length}:\"#{var.class.to_s.downcase}\":#{var.members.length}:{"
                                var.members.each do |member|
                                        s << "#{PHP.serialize(member)}#{PHP.serialize(var[member])}"
                                end
                                s << '}'

                        when String
                                s << "s:#{var.length}:\"#{var}\";"

                        when Fixnum # PHP doesn't have bignums
                                s << "i:#{var};"

                        when Float
                                s << "d:#{var};"

                        when NilClass
                                s << 'N;'

                        when FalseClass, TrueClass
                                s << "b:#{var ? 1 :0};"

                        else
                                if var.respond_to?(:to_assoc)
                                        v = var.to_assoc
                                        # encode as Object with same name
                                        s << "O:#{var.class.to_s.length}:\"#{var.class.to_s.downcase}\":#{v.length}:{"
                                        v.each do |k,v|
                                                s << "#{PHP.serialize(k.to_s)}#{PHP.serialize(v)}"
                                        end
                                        s << '}'
                                else
                                        raise TypeError, "Unable to serialize type #{var.class}"
                                end
                end

                s
        end