@Jan is right, as usual. I really like filtfilt() because it has zero phase lag at all frequencies. filtfilt() is non-causal because it filters data backwards as well as forwards. Therefore you could not use filtfilt(), or some version of it, in a real-time application.
Also possibly of interest to you: because filtfilt() filters the data twice, both forward and backward, it produce double the attentuation (measured in dB) at every frequency, compared to the filter whose parameters you pass to it. For example, if you design a fourth order Butterworth with a 100 Hz cutoff, and use it directly (with filter()) it will have 3 dB attentuation at 100 Hz. If you pass its parameters to filtfilt() and use filtfilt(), you will get 6 dB attenuation at 100 Hz. You can make a compensatory adjustment in the cutoff frequency of the original Butterworth, if you really want 3 dB at 100 Hz.
A particular filter applied twice with filtfilt() is not the same as a doubled-order of the same type. For example, a fourth order Butterworth applied twice with filtfilt() is eighth-order, but it is not eighth-order Butterworth. For most users, this is not important.
For high-order filters, the direct-form implementaiton of filtfilt() may be unstable. HIgh-order is often defined as order 12 or more, but I have seen instability at lower orders. Therefore I would be careful using an initial filter order of greater than four with filtfilt(). If you filter is unstable, you will know it because you get crazy large outputs.