Масив като аргумент на meтод

emagi

Registered
Имам следния проблем:
PHP:
............................
call_user_func_array(array($this, $_POST['method']), array_values($_POST));
............................
$_POST['method'] има за стойност GetOfferRecords()
след което :
PHP:
public function GetOfferRecords(array $param)
	{
		if (is_array($param))
		{
//error
.............................

Грешката е следната:
Catchable fatal error: Argument 1 passed to AjaxClass::GetOfferRecords() must be of the type array, string given in C:
Защо ми дава ще подавам стринг, след като е масив.
 
http://php.net/manual/en/function.call-user-func-array.php

ти му пращаш 3 параметъра. няма ли да стане така::

$this->{$_POST['method']}(array_values($_POST)); :roll:
 
Бъркаш се с аргумента на call_user_func_array().
Ти подаваш масив, но вътре в масива самата функция взима всеки индекс като аргумент.

Т.е. направи така:

PHP:
call_user_func_array(array($this, $_POST['method']), array(array_values($_POST)));

ЕДИТ: да уточня.

Когато взимаш с array_values, то ти връща масив. Оттам имаш ключ и стойност. Реално ти подаваш стойността на метода, но той е в случая стринг, затова ти пръщи грешка, че подаваш стринг, а не масив. За това подаваш един масив, в който връщаш като аргумент, именно, array_values().

@djman, не му праща 3 параметъра. Първия параметър е array($classObject, $classMethod). Ползва се, когато се вика метод на клас.
 
StormBreaker каза:
Като мнението на @Revelation, само че можеш да ползваш това: http://php.net/manual/en/function.call-user-func.php

И аз се замислих да се ползва само call_user_func(), но ме домързя да погледна документацията. :D
 
А моят вариант с какво не е добър? Прекалено "мръсен" ли е, каква е разликата? Интересно ми е :)
 
djman каза:
А моят вариант с какво не е добър? Прекалено "мръсен" ли е, каква е разликата? Интересно ми е :)

Хардкодед, може би. Лично аз използвам метода, който и @emagi използва. Просто е по-четимо, удобно и по- нехардкоднато.
 

Back
Горе