Ultimately, the User portion of UX will depend on your users.
The best approach will change based on conditions like:
- What deployment targets you're looking to support / optimize (touch vs keyboard)
- If users are doing data-entry from a pre-existing form that has a certain look/feel
- What cultural background / units are common / supported
- The range of values you're looking to collect (babies vs full-grown adults)
Option 1 - Free Text / Parser
This is essentially a micro-grammar, which has advantages and disadvantages. It's somewhat uncommon so there's some inherent discoverability problems, but if you have repeated users, it can offer a powerful way to enter data into a single field without the interaction cost of changing fields/contexts. To aid in discoverability, you can use placeholder text to suggest the correct format for data.
By far, this will also require the most development work to implement compared to other options, but is still relatively feasible based on how many languages / cultures you need to support
Option 2/3 - Collect information in pieces
Collecting information separately is certainly the easiest to code in almost any case, so you might want to optimize your dev cycle for some rarely used features. Then it's up to you how you want to collect numeric values (using a stepper, dropdown, radio button, or button group as some examples). Each input metaphor has advantages / disadvantages over different demographics / deployment targets.
Option 4 - Slider - If you're collecting height across a small range of values (for small children for instance), you could use a slider, but note that as the number of values increase, the precision required to correctly select a value from a slider becomes increasingly hard, especially on mobile. If precision is important (as it typically is for height/weight) then I would likely avoid this option.
Just as a thought experiment, here are several different mockups.
download bmml source – Wireframes created with Balsamiq Mockups