Entpacken eines Arrays von Argumenten in PHP

Lesezeit: 2 Minuten

Entpacken eines Arrays von Argumenten in PHP
gibbons

Python stellt den “*”-Operator bereit, um eine Liste von Tupeln zu entpacken und sie einer Funktion als Argumente zu übergeben, etwa so:

args = [3, 6]
range(*args)            # call with arguments unpacked from a list

Dies ist äquivalent zu:

range(3, 6)

Weiß jemand, ob es eine Möglichkeit gibt, dies in PHP zu erreichen? Einiges Googeln nach Variationen von “PHP Unpack” hat nicht sofort etwas ergeben. Vielleicht heißt es in PHP etwas anderes?

1647178445 313 Entpacken eines Arrays von Argumenten in PHP
Salvador Dalí

Im php5.6 Argument entpacken via ... (Splat-Operator) wurde hinzugefügt. Mit ihm können Sie loswerden call_user_func_array() für diese einfachere Alternative. Zum Beispiel mit einer Funktion:

function add($a, $b){
  return $a + $b;
}

Mit deinem Array $list = [4, 6]; (nach php5.5 können Sie Arrays auf diese Weise deklarieren).

Sie können Ihre Funktion mit aufrufen ...:

echo add(...$list);

1647178446 512 Entpacken eines Arrays von Argumenten in PHP
Greg

Sie können verwenden call_user_func_array() um das zu erreichen:

call_user_func_array("range", $args); um dein Beispiel zu verwenden.

  • Dies sieht aus wie eine alte Antwort – die Verwendung des Operators zum Entpacken des Arguments ist jetzt wahrscheinlich angemessener, siehe @Salvador Dalis Antwort

    – jgivoni

    14. November 2019 um 15:42 Uhr

  • Stimme @jgivoni zu. Der allgemeine Trend in PHP, der erstmals in PHP 7 und jetzt in PHP 8 zu sehen war, geht weg von unkontrollierten Funktionen wie z call_user_func_array(), func_get_args()usw. zugunsten des Variadics-Operators “…”. Nun … ich wäre sehr verbunden, wenn mir jemand sagen könnte, wie das in Python geht: $m = ‘getName’; $name = $obj->$m();

    – dougB

    2. Dezember 2020 um 7:58 Uhr

In bestimmten Szenarien können Sie die Verwendung von in Betracht ziehen unpackingwas in PHP möglich ist, ist ein ähnlicher Weg wie Python:

list($min, $max) = [3, 6];
range($min, $max);

So bin ich zumindest zu dieser Antwort gekommen. Google-Suche: PHP argument unpacking

  • Sehr schön. Ich dachte darüber nach ($min, $max) oder {$min, $max}. Aber list habe ich gesucht

    – Ferdinator

    12. Juli 2018 um 12:11 Uhr

Sie sollten das call_user_func_array verwenden

call_user_func_array(array(CLASS, METHOD), array(arg1, arg2, ....))

http://www.php.net/call_user_func_array

oder verwenden Sie die Reflexions-API http://www.php.net/oop5.reflection

<?php

function add(int ...$arr) {           // typehint ready
    return array_sum($arr);
}

var_dump(add(1, 2, 3, ...[1, 2, 3])); // int(12)

Ein weiteres Beispiel mit … – Operator.
RFC: https://wiki.php.net/rfc/variadics

997890cookie-checkEntpacken eines Arrays von Argumenten in PHP

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy