/ / PHP Funkcja zwrotna nie działa na funkcjach obiektowych - php, tablice, oop, callback

Funkcja wywołania zwrotnego PHP nie działa w funkcjach obiektowych - php, tablice, oop, callback

Mam tablicę i chcę się zgłosić MySQLi->real_escape_string na każdym elemencie tablicy przez array_walk ale to nie działa:

array_walk($array, "$mysqli->real_escape_string");

Daje ten błąd:

Ostrzeżenie: array_walk () oczekuje, że parametr 2 będzie prawidłowym wywołaniem zwrotnym, funkcja „$ mysqli-> real_escape_string” nie została znaleziona lub niepoprawna nazwa funkcji w C: wampwwwts.php w linii 69

$mysqli jest prawidłowym obiektem i działa poprawnie, jeśli to zrobię $mysqli->real_escape_string("anything") na cokolwiek innego.

Moje pytanie: Czy nie można przekazać funkcji obiektu jako wywołania zwrotnego? Czy robię coś złego?


WAŻNY: Wiem, że mogę utworzyć własną funkcję zwrotną i zaimplementować w niej $ mysqli-> real_escape_string ALE Chcę wiedzieć, czy nie można użyć wywołania zwrotnego jako funkcji obiektu?

Odpowiedzi:

8 dla odpowiedzi № 1

Jak możesz przeczytać dalej wywołanie zwrotne php strona, będziesz używać:

# produces an error
array_walk($array, array($msqli, "real_escape_string"));
array_map($array, array($msqli, "real_escape_string"));

9 dla odpowiedzi nr 2

Jeśli wywołujesz metodę w obiekcie, powinieneś przekazać ją do tablicy, najpierw jako obiekt / kontekst, a następnie druga metoda:

Mały przykład

function callback()
{
//blah
}

powyższe nazywa się funkcją i powinno się nazywać tak: array_walk($array, "callback");

class object()
{
public function callback()
{
}
}

powyższe wywołanie zwrotne nazywa się metodą, jest praktycznie takie samo jak funkcja, ale ponieważ znajduje się w klasie, ma kontekst nadrzędny, dlatego powinno się nazywać tak:

$object = new object();
array_walk($array, array($object , "callback"));

MySQLi jest biblioteką zorientowaną obiektowo, więc po zainicjowaniu obiektu mysqli powinieneś wywołać „metodę” w następujący sposób:

array_walk($array, array($msqli, "real_escape_string"));

Jak wspomniano powyżej, array_walk wprowadzi zarówno klucz, jak i wartość do obiektu mysql, który spowoduje dokładne ucieczkę, powinieneś użyć array_map aby przejść same wartości:

array_map($array, array($msqli, "real_escape_string"));


0 dla odpowiedzi № 3

array_walk pozwoli tylko na przekazanie funkcji zdefiniowanej przez użytkownika jako wywołanie zwrotne, a nie na podstawową funkcję lub metodę PHP. Aby to zrobić, spróbuję:

foreach($array as &$value) {
$value = $mysqli->real_escape_string($value);
}

Przekazanie wartości przez referencję pozwala na jej modyfikację w pętli foreach, co powoduje ucieczkę każdego elementu tablicy.