Как писать вложенные функции в JS и PHP

Сегодня я покажу вам, как можно писать вложенные функции и получать к ним доступ как в JavaScript, так и в PHP.

Вложенность функции означает наличие нескольких функций, называемых дочерними функциями, внутри одной функции, называемой родительской.

Для того чтобы вложить функцию, необходимо иметь родительскую функцию, а затем дочерние функции внутри нее.

Начнем с JavaScript

Предположим, что мы создаем простой калькулятор, который будет возвращать дочерние функции ( плюс ) и ** ( минус )**.

Плюс будет просто складывать предоставленные числа, а минус будет просто вычитать предоставленные числа.

Родительская функция

Для начала мы объявим родительскую функцию calculate(), которая будет принимать 2 параметра (x, y).

function calculate(x, y){
    /**
    * @calculate: Returns child functions 
    * @ x : Value 1 of type int
    * @ y : Value 2 of type int
    **/

}
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь объявим локальную переменную для хранения параметров x и y, затем умножим ее на (1), чтобы убедиться, что мы действительно работаем с числами.

function calculate(x, y){
    /**
    * @calculate: Returns child functions 
    * @ x : Value 1 of type int
    * @ y : Value 2 of type int
    **/

   let a = x * 1;
   let b = y * 1;

}
Вход в полноэкранный режим Выход из полноэкранного режима

Дочерняя функция

Давайте объявим дочернюю функцию, которая будет возвращать сумму значений. Мы назовем эту функцию add() и передадим параметры (a, b).

function calculate(x, y){
    /**
    * @calculate: Returns child functions 
    * @ x : Value 1 of type int
    * @ y : Value 2 of type int
    **/

    let a = x * 1;
    let b = y * 1;

    function add(a, b){
        return ( a + b );
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

Теперь давайте протестируем эту простую функцию, вернув объект с пользовательским именем и нашу дочернюю функцию в качестве его значения.

function calculate(x, y){
    /**
    * @calculate: Returns child functions 
    * @ x : Value 1 of type int
    * @ y : Value 2 of type int
    **/

    let a = x * 1;
    let b = y * 1;

    function sum(a, b){
        return ( a + b );
    }

   return {
       plus : sum
   }
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Практически это означает, что при любом обращении к возвращаемому значению plus наша функция calculate будет выполнять свою дочернюю функцию sum().

Давайте объявим переменную, которая будет хранить нашу функцию и ее свойства.

var calculate = calculate();
Вход в полноэкранный режим Выход из полноэкранного режима

Сейчас я покажу вам два способа доступа к свойствам нашей функции. Думайте об этом так, как будто вы обращаетесь к объекту.

Мы получим доступ к свойству plus и передадим параметры ( 5, 5 ), чтобы вернуть сумму двух значений.

  • Точечная нотация
var calculate = calculate();
var sum = calculate.plus(5, 5);
console.log(sum);
Вход в полноэкранный режим Выход из полноэкранного режима

  • Использование квадратных скобок

Этот метод довольно сложен. Но в PHP это также один из способов доступа к вложенным функциям.

Использование этого метода означает, что вы должны передать свойство, к которому пытаетесь получить доступ, в виде строки, а затем вывести результат, передав параметры.

Звучит запутанно, верно? Взгляните на приведенный ниже код.

var calculate = calculate();
var sum = calculate['plus'];
console.log(sum( 5, 5 ));
Вход в полноэкранный режим Выход из полноэкранного режима

Мы присвоили свойство функции plus переменной sum, не передавая никаких параметров.

Теперь мы выводим значение из переменной sum, передавая значения (5, 5).

Как вы можете видеть, это тот же самый Output.

Дополнительные дочерние функции

Давайте добавим еще 2 дочерние функции для вычитания или умножения наших значений.

function calculate(x, y){
    /**
    * @calculate: Returns child functions 
    * @ x : Value 1 of type int
    * @ y : Value 2 of type int
    **/

    let a = x * 1;
    let b = y * 1;

    function sum(a, b){
        return ( a + b );
    }
    function subtract(a, b){
        return ( a - b );
    }
    function multiply(a, b){
        return ( a * b );
    }

   return {
       plus : sum,
       minus : subtract,
       times : multiply
   }
}
var calculate = calculate();
var sum = calculate.plus(5, 5);
var subtract = calculate.minus(5, 5);
var multiply = calculate.times(5, 5);

console.log('sum = '+sum);
console.log('minus = '+subtract);
console.log('times = '+ multiply);
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь это именно тот результат, который нам нужен.

Вот и все по вложенным функциям JavaScript.

PHP

В PHP процесс все тот же, за исключением того, что вы не можете получить доступ к свойству вложенной функции, используя точечную нотацию.

Это связано с тем, что нотация точки, известная как конкатенатор, используется для объединения двух строк или переменных.

У нас все еще есть 2 способа доступа к нашей вложенной функции.

  • Использование глобальной переменной

Мы объявим глобальную переменную для хранения нашей функции и ее свойств, затем одновременно передадим параметры, после чего будем использовать квадратные скобки для доступа к свойствам нашей переменной.

Обратите внимание, что мы также передадим параметры дочерним функциям в возвращаемом значении.

function calc($x, $y){
    $a = $x;
    $b = $y;
    function sum($a, $b){
        return ($a + $b);
    };

    $retval = [
    "sum" => sum($x, $y) //pass in the param for child function sum()
    ];

    return $retval;
}
//Bind function to variable
$calcs = calc(1,2);

//Return all properties as an array
//var_dump($calcs); 

//access the sum property
echo ($calcs['sum']);
Вход в полноэкранный режим Выход из полноэкранного режима

Это именно тот результат, который мы ожидаем.

  • Используя переменную, мы вызываем ее свойства, как будто все они были объявлены как функции.

Прежде чем показать вам этот метод, давайте добавим несколько дочерних функций.

function calc($x, $y){
    $a = $x;
    $b = $y;
    function sum($a, $b){
        return ($a + $b);
    }

   function subtract($a, $b){
        return ($a - $b);
    }

   $retval = [
       "sum" => sum($x, $y),
       "minus" => subtract($x, $y)
    ];

    return $retval;
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь, поскольку мы возвращаем дочерним функциям параметры, переданные непосредственно им, мы можем вызывать дочерние функции непосредственно в любом месте нашей страницы.

function calc($x, $y){
    $a = $x;
    $b = $y;
    function sum($a, $b){
        return ($a + $b);
    }

   function subtract($a, $b){
        return ($a - $b);
    }

   $retval = [
       "sum" => sum($x, $y),
       "minus" => subtract($x, $y)
    ];

    return $retval;
}
//add a dummy value to prevent argument count error
$calcs = calc(1, 1);

//add child function
echo ("20 + 10 child function = ".sum(20, 10)) .'<br>';

//subtract child function
echo ("20 - 10 child function = ".subtract(20, 10));
Вход в полноэкранный режим Выход из полноэкранного режима

Это снова тот результат, который нам нужен.

Надеюсь, вы поняли, что такое вложенные функции и как их писать на JavaScript и PHP.

Вы дошли до конца моей статьи.

EXTRA

Недавно я запустил пакет JavaScript, который проверяет ваши HTML-формы, используя правила проверки, регулярные выражения и атрибуты ввода формы.

Я буду благодарен, если вы уделите несколько секунд, чтобы проверить его.

octaValidate — Библиотека проверки форм на стороне клиента | Product Hunt

Этот небольшой скрипт помогает проверять ваши HTML-формы с помощью правил проверки, сложных регулярных выражений и атрибутов ввода формы.

producthunt.com

Спасибо.

Оцените статью
Procodings.ru
Добавить комментарий