Vra

Hierdie voorbeeld is geneem op die funksionele programmeringsbladsy van PhpTherightway.

<?php
/**
 * Creates an anonymous filter function accepting items > $min
 *
 * Returns a single filter out of a family of "greater than n" filters
 */
function criteria_greater_than($min)
{
    return function($item) use ($min) {
        return $item > $min;
    };
}

$input = array(1, 2, 3, 4, 5, 6);

// Use array_filter on a input with a selected filter function
$output = array_filter($input, criteria_greater_than(3));

print_r($output); // items > 3

Wat is die doel van die feit? return function() ?

Ek het dit net geskryf en dit doen dieselfde.

array_filter($input, function($input) use ($min) {
    return $input > $min;
}); // items > 3

Selfs as ek hierdie terugbel op 'n funksie aanstel, lyk die sekondêre funksie onnodig.

Het ek iets oor die hoof gesien of het dit 'n ander doel?

Was dit nuttig?

Oplossing

Dit is absoluut noodsaaklik vir criteria_greater_than Om die waarde wat u wil teruggee, terug te gee. Bv. vir 'n funksie om die waarde 5 terug te gee:

function get_5() {
    return 5;
}

Jy gebruik dit soos $var = get_5();, maar as u dit konstant stel, sou u dit net doen $var = 5; of call_my_function(5). Let op wat u moet gebruik return Om iets in 'n funksie terug te gee. Oorweeg nou hierdie funksie:

function get_fx($x)
{
    return function () use ($x)
           {
               return $x;
           };
}

$v5 = get_fx(5);
$v6 = get_fx(6);

Wat is $v5 en $v6? .. wel, dit is funksies, want dit is wat hulle teruggekeer het. In werklikheid $v5() == get_5() is waar, maar $ 6 () == get_5 () is onwaar, want get_fx gee verskillende funksies (sluitings) afhanklik van die argumente wat deurgegee is.

As u die eerste sou oorslaan return U sou niks uit die eerste funksie kry nie .. bv. $ V5 en $ V6 sou niks opgedra het nie. As u die tweede oorgeslaan het return In die terugbesorgde funksie sou hulle niks teruggee as hulle genoem word nie, dit wil sê. $v5() sou nie 5 terugkeer nie en $v6() sou nie terugkeer 6 nie.

Ander wenke

Tweede param van array_filter is callback. U kan dit binne spesifiseer array_filter as anonymous function of spesifiseer die naam van die funksie. Binne van anonymous function jy doen die filter, dit is waarom return gebruik. Die tweede een opbrengs is om anonieme funksie as 'n terugbel te gebruik by array_filter Dit gee die verwysing op hierdie funksie terug.

Met die tweede funksie kan u nie net terugbel aan Array_Filter, maar terugbel- en filtrasiekonteks ($ min) tegelyk deurgee. Dit is 'n oortuigende manier om kode te hergebruik.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top