user2278120
user2278120

Reputation: 653

PHP use variable to pass multiple arguments to function

I have a function that expects 9 arguments to be passed to it. The first argument it expects is a string, the rest are ints.

Here is the function:

 getProductPrice('red', 8, 1.6, 2.15, 0, 0, 0, 17.6, 0);

When that gets run, it works fine. However, when I run it like this:

 getProductPrice("'red'".','.$arguments);

It does not work.

"'red'".','.$arguments

outputs: 'red', 8, 1.6, 2.15, 0, 0, 0, 17.6, 0

If anyone could tell me how to use the $arguments variable in place of all the arguments?

What I ended up suspecting was making it not work, is that what $arguments is outputting is a string, so I looked into how to convert a comma separated string of numbers into a php function's arguments.

I came across this:

$params = explode(',', $str);
call_user_func_array("func", $params);

I can't figure out how to use this solution for two reasons:
1. I need to pass a string along with the numbers.
2. simply putting my function name where it says "func" in that example won't work, because it's a cakephp function, which requires me to put $this->ModelName->functionname, which breaks the first argument in the call_user_func_array function()

Any ideas how to help me guys?

I could just put the variables that make $arguments output what it does, but it's a ton of complicated logic and math to get each of those numbers, so my function calls would look ridiculous.

Thanks again.

Upvotes: 2

Views: 3086

Answers (1)

Tamás Barta
Tamás Barta

Reputation: 1628

You should try replacing the "func" string with array($this->ModelName, 'functionname'). The first element in this array is the object on which you call the method, the second is a string representation of the name of this method. This way it should work:

$params = explode(',', $str);
call_user_func_array(array($this->ModelName, 'functionname'), $params);

Of course replace the placeholder names with your own.

Upvotes: 2

Related Questions