diff --git .travis.yml .travis.yml
index d8f737f96..8c065b9e8 100644
--- .travis.yml
+++ .travis.yml
@@ -80,8 +80,6 @@ before_install:
 
   # setup NodeJS version using NVM
   - export PATH="$HOME/.composer/vendor/bin:$PATH"
-  # make sure composer is < 2.0.0 to avoid dependencies install errors.
-  - composer self-update 1.10.16
   - node --version
   - nvm install 14.15.0
   - node --version
diff --git composer.json composer.json
index d07167858..3bf5b45c3 100644
--- composer.json
+++ composer.json
@@ -13,7 +13,7 @@
 		"social network"
 	],
 	"homepage": "https://buddypress.org",
-	"license": "GPL-2.0+",
+	"license": "GPL-2.0-or-later",
 	"authors": [ {
 		"name": "BuddyPress Community",
 		"homepage": "https://buddypress.org/about/"
@@ -27,12 +27,13 @@
 		"wiki": "https://codex.buddypress.org/"
 	},
 	"require": {
-		"composer/installers": "~1.0",
-		"php": ">=5.3.0"
+		"composer/installers": "^1.10.0",
+		"php": ">=5.6.0"
 	},
 	"require-dev": {
-		"phpcompatibility/phpcompatibility-wp": "*",
-		"dealerdirect/phpcodesniffer-composer-installer": "^0.4.3",
-		"wp-phpunit/wp-phpunit": "^5.4"
+		"phpcompatibility/phpcompatibility-wp": "^2.1.0",
+		"dealerdirect/phpcodesniffer-composer-installer": "^0.7.1",
+		"wp-phpunit/wp-phpunit": "^5.6",
+		"phpunit/phpunit": "^7.5"
 	}
 }
diff --git package.json package.json
index 8a9336e13..6ae270c71 100644
--- package.json
+++ package.json
@@ -48,9 +48,13 @@
 		"build:components": "parcel build src/js/bp-core/js/block-components/block-components.js --out-dir build/bp-core/js --out-file block-components.js --global bp",
 		"wp-env": "wp-env",
 		"test-php": "npm run wp-env run phpunit 'phpunit -c /var/www/html/wp-content/plugins/buddypress/tests/phpunit/env.xml'",
+		"test-php:composer": "npm run wp-env run phpunit 'php /var/www/html/wp-content/plugins/buddypress/vendor/phpunit/phpunit/phpunit -c /var/www/html/wp-content/plugins/buddypress/tests/phpunit/env.xml'",
 		"test-php:group": "npm run wp-env run phpunit 'phpunit -c /var/www/html/wp-content/plugins/buddypress/tests/phpunit/env.xml --group $npm_confi_g'",
+		"test-php:composer:group": "npm run wp-env run phpunit 'php /var/www/html/wp-content/plugins/buddypress/vendor/phpunit/phpunit/phpunit -c /var/www/html/wp-content/plugins/buddypress/tests/phpunit/env.xml --group $npm_confi_g'",
 		"test-php-multisite": "npm run wp-env run phpunit 'phpunit -c /var/www/html/wp-content/plugins/buddypress/tests/phpunit/env.multisite.xml'",
-		"test-php-multisite:group": "npm run wp-env run phpunit 'phpunit -c /var/www/html/wp-content/plugins/buddypress/tests/phpunit/env.multisite.xml --group $npm_confi_g'"
+		"test-php-multisite:composer": "npm run wp-env run phpunit 'php /var/www/html/wp-content/plugins/buddypress/vendor/phpunit/phpunit/phpunit -c /var/www/html/wp-content/plugins/buddypress/tests/phpunit/env.multisite.xml'",
+		"test-php-multisite:group": "npm run wp-env run phpunit 'phpunit -c /var/www/html/wp-content/plugins/buddypress/tests/phpunit/env.multisite.xml --group $npm_confi_g'",
+		"test-php-multisite:composer:group": "npm run wp-env run phpunit 'php /var/www/html/wp-content/plugins/buddypress/vendor/phpunit/phpunit/phpunit -c /var/www/html/wp-content/plugins/buddypress/tests/phpunit/env.multisite.xml --group $npm_confi_g'"
 	},
 	"keywords": [
 		"activity",
diff --git src/bp-groups/bp-groups-functions.php src/bp-groups/bp-groups-functions.php
index 50b7b399d..d1af9ad1f 100644
--- src/bp-groups/bp-groups-functions.php
+++ src/bp-groups/bp-groups-functions.php
@@ -1669,9 +1669,9 @@ function groups_delete_invite( $user_id, $group_id, $inviter_id = false ) {
  *     @type bool   $force_resend  Whether to resend the email & notification if one has already been sent.
  * }
  */
-function groups_send_invites( $args = array() ) {
+function groups_send_invites( ...$args ) {
 	// Backward compatibility with old method of passing arguments.
-	if ( ! is_array( $args ) || func_num_args() > 1 ) {
+	if ( ! is_array( $args[0] ) || count( $args ) > 1 ) {
 		_deprecated_argument( __METHOD__, '5.0.0', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) );
 
 		$old_args_keys = array(
@@ -1679,7 +1679,9 @@ function groups_send_invites( $args = array() ) {
 			1 => 'group_id',
 		);
 
-		$args = bp_core_parse_args_array( $old_args_keys, func_get_args() );
+		$args = bp_core_parse_args_array( $old_args_keys, $args );
+	} else {
+		$args = reset( $args );
 	}
 
 	$r = bp_parse_args( $args, array(
@@ -2008,9 +2010,9 @@ function groups_remove_member( $user_id, $group_id ) {
  * }
  * @return bool True on success, false on failure.
  */
-function groups_send_membership_request( $args = array() ) {
+function groups_send_membership_request( ...$args ) {
 	// Backward compatibility with old method of passing arguments.
-	if ( ! is_array( $args ) || func_num_args() > 1 ) {
+	if ( ! is_array( $args[0] ) || count( $args ) > 1 ) {
 		_deprecated_argument( __METHOD__, '5.0.0', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) );
 
 		$old_args_keys = array(
@@ -2018,7 +2020,9 @@ function groups_send_membership_request( $args = array() ) {
 			1 => 'group_id',
 		);
 
-		$args = bp_core_parse_args_array( $old_args_keys, func_get_args() );
+		$args = bp_core_parse_args_array( $old_args_keys, $args );
+	} else {
+		$args = reset( $args );
 	}
 
 	$r = bp_parse_args( $args, array(
diff --git src/bp-members/classes/class-bp-core-members-template.php src/bp-members/classes/class-bp-core-members-template.php
index af00c6bdf..ed82ef88f 100644
--- src/bp-members/classes/class-bp-core-members-template.php
+++ src/bp-members/classes/class-bp-core-members-template.php
@@ -123,9 +123,9 @@ class BP_Core_Members_Template {
 	 *     @type string $page_arg    Optional. The string used as a query parameter in pagination links.
 	 * }
 	 */
-	public function __construct( $args ) {
+	public function __construct( ...$args ) {
 		// Backward compatibility with old method of passing arguments.
-		if ( ! is_array( $args ) || func_num_args() > 1 ) {
+		if ( ! is_array( $args[0] ) || count( $args ) > 1 ) {
 			_deprecated_argument( __METHOD__, '7.0.0', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) );
 
 			$old_args_keys = array(
@@ -146,7 +146,9 @@ class BP_Core_Members_Template {
 				14 => 'member_type__not_in'
 			);
 
-			$args = bp_core_parse_args_array( $old_args_keys, func_get_args() );
+			$args = bp_core_parse_args_array( $old_args_keys, $args );
+		} else {
+			$args = reset( $args );
 		}
 
 		// Support both 'page_number' and 'page' for backward compatibility.
