$_POST is available for POST method only. For other methods (PUT, PATCH, DELETE) but also POST and GET, the http request body is stored in the BODY variable.
Therefore your put() function should look like:
public static function put($f3,$args) {
self::validateArgs($args);
self::validatePost();
self::findById($args['id']);
parse_str($f3->get('BODY'),$input);
$f3->set('INPUT',$input);
self::$member->copyFrom('INPUT');
//var_dump(self::$member);
self::$member->save();
self::returnModel();
}
Note that the request body is in the form of a query string: firstname=Not-Mark&lastname=Not-Deibert
. That explains why it needs to be parsed with parse_str.