Ist es möglich, sie ohne zu nennen zuweisen, wie wir in JavaScript tun, um Identifier? z.B.
Nicht in PHP 5.x; es sei denn, Sie zählen es, wenn Ihre Methode einen Rückruf als Argument akzeptiert. zB:
$square = array_map(function ($v) { return $v*$v; }, $array);
Was die korrekte Verwendung von Verwendung Konstrukt ist bei der Definition anonym Funktion
Das use
Schlüsselwort gibt an, welche Variablen aus dem aktuellen lexikalischen Gültigkeitsbereich in den Verschluss eingeführt werden sollten. Sie können sie sogar als Verweis übergeben und die Variablen übergeben werden ändern, zB:
$total = 0;
array_walk($array, function ($v) use (&$total) { $total += $v; });
// $total is now the sum of elements in $array
was ist der Status der anonymen Funktion in öffentlichen Verfahren mit Zugang zu privaten Eigenschaften?
Verschlüsse innerhalb einer Klasse definiert haben vollen Zugriff auf alle seine Eigenschaften und Methoden, auch private, ohne dass $this
durch das Schlüsselwort use
in PHP 5.4 importieren:
// this works fine in PHP 5.4
$anon_func =
function($my_param) {
$thing = $my_param + $this->object_property;
echo('anonymous function');
};
Beachten Sie, dass aus irgendeinem seltsamen Grund Unterstützung für $this
in Verschlüsse was removed in PHP 5.3. In dieser Version können Sie diese Einschränkung umgehen, mit so etwas wie:
// a workaround for PHP 5.3
$temp = $this;
$anon_func =
function($my_param) use ($temp) {
$thing = $my_param + $temp->object_property;
echo('anonymous function');
};
Aber das gibt Ihnen die öffentliche Mitglieder versuchen, nur zugreifen, werden Sie private Mitglieder zugreifen noch einen Fehler geben.
Beachten Sie außerdem, dass der Versuch, unabhängig von der PHP-Version $this
(über use
) zu importieren, zu einem schwerwiegenden Fehler Cannot use $this as lexical variable
führt.
Verschluss ist nicht ganz gleichbedeutend mit einem anonyme Funktion, obwohl anonyme Funktionen in PHP vom Typ 'Closure' sind. Nur damit du es weißt. – BoltClock
Was ist der genaue Fehler, wenn Sie Ihr zweites Codebeispiel versuchen? "falsch" ist ein wenig unspezifisch. – BoltClock
Kann $ nicht als lexikalische Variable verwenden –