Change Object's Location on local Z-Axis using Slider
Applying rotation accumulates

As I was poorly trying to point out in comment applying the translation matrix from value will have a cumulative effect. (no matter what direction) 

Use the delta value calculated from previous value.

Other minor changes, use self in the setter getter, rather than relying on  bpy.context.object is self  If you want context possibly better to use an update method instead.

Using ob.get("propname", default) gives a default value even when the property hasn't been set.

EDIT.  Changed this to moving "locally globally" this way our slider value is global and won't be affected by local scale. (Move 1 unit globally in local z, akin to translate operator)


Example below working in 2.8. (Minor change @ to * or back).  

import bpy, mathutils
from bpy.types import Panel, Operator
from bpy.props import FloatProperty
from mathutils import Matrix, Vector

#get, set methods of the floatproperty
def get_locationZ(self):
    return self.get('locationZ', 0)

def set_locationZ(self, value):
    z_axis = Vector((0, 0, 1))
    delta = value - self.get('locationZ', 0)
    v = (self.matrix_world.to_3x3() @ z_axis).normalized()

    self.matrix_world.translation += delta * v
    self['locationZ'] = value

class VIEW3D_PT_ToolPanel(Panel):
    bl_space_type='VIEW_3D'
    bl_region_type='TOOLS'
    bl_label='Cylinder'
    bl_context='objectmode'


    def draw(self, context):
        layout = self.layout
        obj = context.object

        row = layout.row()
        row.template_ID(context.view_layer.objects, "active") # context.scene.objects (2.7x)

        split=layout.split()
        col=split.column(align=True)

        if obj is not None:
            col.prop(obj, 'myFloat', slider=True)

#floatproperty
bpy.types.Object.myFloat = FloatProperty(
name = "locationZ", 
description = "Set the location on local z axis",
min = -100,
max = 100,
soft_min=-10,
soft_max=10,
step=1,
subtype='DISTANCE',
get = get_locationZ,
set = set_locationZ)


#Register
def register():
    bpy.utils.register_class(VIEW3D_PT_ToolPanel)
#Unregister
def unregister():
    bpy.utils.unregister_class(VIEW3D_PT_ToolPanel)

if __name__== '__main__':
    register() 


As a side note the new elementwise @ multiplier works as expected for M @= T  For 2.7x found using M = T * M a more reliable option.