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 № 1Jak 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.