[PHP] rozbicie tablicy na argumenty funckji

0

Witam

Problem następujący:

Chciałem zamknąć samą obsługę wyjątków modelu w jednej funkcji:

 		private function operate($fnName, $param) {
			try {
				if (is_array($param)) $this->fileManager->$fnName(extract($param));
				else $this->fileManager->$fnName($param);
			} catch (Exception $ex) {
				//$this->error = $ex->getMessage();
				throw $ex;
			}
                       //...
                 }

                 //przykładowa metoda modelu

		public function rename($old, $new) {
			$this->operate('rename', array($old, $new));
		}
		

No i dostaję błąd ilości argumentów funkcji, extract w takim przypadku nie działa...
Da się to w ogóle zrobić, czy może ktoś polecić inne podejście?

0

extract to złe podejście. Po prostu tworzy Ci w metodzie operate kilka zmiennych, które mają takie nazwy, jak nazwy argumentów funkcji, którą chcesz odpalić. To coś podobnego do tego:

function funkcja_do_odpalenia($argument_pierwszy, $argument_drugi) {
...
}


function odpal_funkcje() {
  $argument_pierwszy = 'raz';
  $argument_drugi = 2;
  funkcja_do_odpalenia(); // (*)
}

odpal_funkcje();

Jak sam widzisz odpalamy funkcję funkcja_do_odpalenia (*) tak naprawdę bez żadnych argumentów. I fakt, że zdefiniowaliśmy sobie obok zmienne $argument_pierwszy i $argument_drugi nic nam tu nie pomoże.

Obczaj w manualu funkcję call_user_func_array. Zauważ jednak, że jej nie podasz tablicy asocjacyjnej (nazwa => wartość) tylko zwykłą -- argumenty mają być po prostu podane po kolei.

0

Dzięki, z callbackiem działa, całkiem o tym zapomniałem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1