Преглед изворни кода

Avoid func_get_args (#4108)

Use variadic syntax instead https://php.net/manual/functions.arguments#functions.variable-arg-list
And avoid dynamic functions names when possible to more easily identify calls and unused functions.
Contributes to https://github.com/FreshRSS/FreshRSS/issues/4103
Alexandre Alapetite пре 4 година
родитељ
комит
a791388ce4
4 измењених фајлова са 27 додато и 27 уклоњено
  1. 10 8
      lib/Minz/ExtensionManager.php
  2. 6 11
      lib/Minz/Translate.php
  3. 9 5
      lib/Minz/Url.php
  4. 2 3
      lib/lib_rss.php

+ 10 - 8
lib/Minz/ExtensionManager.php

@@ -295,23 +295,25 @@ class Minz_ExtensionManager {
 	 * array keys.
 	 *
 	 * @param string $hook_name the hook to call.
-	 * @param additional parameters (for signature, please see self::$hook_list).
+	 * @param array<mixed> $args additional parameters (for signature, please see self::$hook_list).
 	 * @return mixed final result of the called hook.
 	 */
-	public static function callHook($hook_name) {
+	public static function callHook($hook_name, ...$args) {
 		if (!isset(self::$hook_list[$hook_name])) {
 			return;
 		}
 
 		$signature = self::$hook_list[$hook_name]['signature'];
-		$args = func_get_args();
-		if ($signature === 'PassArguments') {
-			array_shift($args);
+		if ($signature === 'OneToOne') {
+			return self::callOneToOne($hook_name, $args[0] ?? null);
+		} elseif ($signature === 'PassArguments') {
 			foreach (self::$hook_list[$hook_name]['list'] as $function) {
-				call_user_func_array($function, $args);
+				call_user_func($function, ...$args);
 			}
-		} else {
-			return call_user_func_array('self::call' . $signature, $args);
+		} elseif ($signature === 'NoneToString') {
+			return self::callNoneToString($hook_name);
+		} elseif ($signature === 'NoneToNone') {
+			return self::callNoneToNone($hook_name);
 		}
 	}
 

+ 6 - 11
lib/Minz/Translate.php

@@ -179,11 +179,11 @@ class Minz_Translate {
 	/**
 	 * Translate a key into its corresponding value based on selected language.
 	 * @param string $key the key to translate.
-	 * @param additional parameters for variable keys.
+	 * @param string $args additional parameters for variable keys.
 	 * @return string value corresponding to the key.
 	 *         If no value is found, return the key itself.
 	 */
-	public static function t($key) {
+	public static function t($key, ...$args) {
 		$group = explode('.', $key);
 
 		if (count($group) < 2) {
@@ -232,9 +232,6 @@ class Minz_Translate {
 		}
 
 		// Get the facultative arguments to replace i18n variables.
-		$args = func_get_args();
-		unset($args[0]);
-
 		return vsprintf($translation_value, $args);
 	}
 
@@ -249,11 +246,9 @@ class Minz_Translate {
 
 /**
  * Alias for Minz_Translate::t()
+ * @param string $key
+ * @param array<string> $args
  */
-function _t($key) {
-	$args = func_get_args();
-	unset($args[0]);
-	array_unshift($args, $key);
-
-	return call_user_func_array('Minz_Translate::t', $args);
+function _t($key, ...$args) {
+	return Minz_Translate::t($key, ...$args);
 }

+ 9 - 5
lib/Minz/Url.php

@@ -118,16 +118,20 @@ class Minz_Url {
 	}
 }
 
-function _url ($controller, $action) {
-	$nb_args = func_num_args ();
+/**
+ * @param string $controller
+ * @param string $action
+ * @param array<string,string> $args
+ */
+function _url ($controller, $action, ...$args) {
+	$nb_args = count($args);
 
-	if($nb_args < 2 || $nb_args % 2 != 0) {
+	if ($nb_args % 2 !== 0) {
 		return false;
 	}
 
-	$args = func_get_args ();
 	$params = array ();
-	for($i = 2; $i < $nb_args; $i = $i + 2) {
+	for ($i = 0; $i < $nb_args; $i += 2) {
 		$params[$args[$i]] = $args[$i + 1];
 	}
 

+ 2 - 3
lib/lib_rss.php

@@ -18,11 +18,10 @@ if (COPY_SYSLOG_TO_STDERR) {
 /**
  * Build a directory path by concatenating a list of directory names.
  *
- * @param $path_parts a list of directory names
+ * @param array<string> $path_parts a list of directory names
  * @return string corresponding to the final pathname
  */
-function join_path() {
-	$path_parts = func_get_args();
+function join_path(...$path_parts) {
 	return join(DIRECTORY_SEPARATOR, $path_parts);
 }