Current limiting using P-CH MOSFET
Yes, there are a couple of significant drawbacks to this scheme.


The drain-source current is not just dependent on the gate-source voltage, but also the source-drain voltage. For a variable supply, this means that you will have different current outputs at different supply voltages.
The threshold current of a FET is temperature dependent, so temperature will affect the current limit. This is not particularly desirable behavior.


You need feedback in order to produce an accurate current source. There are a lot of high-side current source options available online which use an opamp + BJT, but you have asked specifically for a P-channel FET solution. I think this should do the trick:



Quick explanation of the circuit: Rsense measures the load current, which is amplified and buffered by U3. U3 is just a differential op-amp circuit, and can be replaced with an instrumentation ampllifier if higher input impedance is desired. The output from the current measuring amplifier is fed into the non-inverting pin of U1, which by servo action will adjust its output based on the difference between the control voltage and the sensed voltage until the difference is zero (ie: current is in regulation).

The output is fed through a differential opamp configuration (U2) which performs the operation Vout = V(rail) - V(in). We need this as in order to control the P-channel FET, we want to drive the gate lower and lower from the rail voltage in order to get more current. Without this, as U1 tries to increase the current it would actually decrease it, causing it to runaway (control authority in the wrong direction).

Under feedback conditions, the current will stabilize such that the current through the load is equal to the magnitude of the control voltage. You can set this voltage however you like.

When the load is too large for the compliance of the current source (ie: too high a resistance to operate from the input rail), U2 will drive the gate all the way to ground via feedback action, and the voltage on the load will just be the supply voltage. This is your "voltage source" operation. If you like, you could put a comparator on the gate line to detect when the gate voltage is driven below or above a certain point in order to illuminate something like a "constant voltage" or "constant current" light.

Hope this helps!