Пыха - это всегда что-то с чем-то. Как яркий пример, можно вспомнить бездумный порядок аргументов в функциях: array_slice() - тут массив первым аргументом, array_key_exists() - здесь массив вторым аргументом и т.п. Но я сейчас про термины. В программировании есть устоявшиеся термины.
Например, перегрузка функций! Это когда функция может принимать разное количество аргументов и/или разные типы аргументов:
А что в PHP? А в PHP перегрузка (overloading) - это по факту перехват обращений к несуществующим свойствам и методам через магические методы!
Зачем было использовать именно этот термин - перегрузка?! Пыха-стайл блин 😂
Далее у нас термин замыкание. Обычно это функция вместе с её лексическим окружением (то есть переменными, которые видны в месте её определения). И эта функция может запоминать эти переменные "подолгу", и у другой функции-замыкании эти значения переменных уже будут свои.
Вот пример на питоне:
Возвращаемый add будет помнить count из своего окружения. Такое же в JS, Kotlin и Go.
А что документация PHP нам говорит?
https://www.php.net/manual/en/functions.anonymous.php
Честности ради можно сказать, что классическое замыкание в PHP можно повторить.
Например, перегрузка функций! Это когда функция может принимать разное количество аргументов и/или разные типы аргументов:
// C++
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
А что в PHP? А в PHP перегрузка (overloading) - это по факту перехват обращений к несуществующим свойствам и методам через магические методы!
// PHP :)
class Magic {
public function __call($name, $args) {
return "дернули метод $name";
}
public function __get($name) {
return "дернули поле $name";
}
}
Зачем было использовать именно этот термин - перегрузка?! Пыха-стайл блин 😂
Далее у нас термин замыкание. Обычно это функция вместе с её лексическим окружением (то есть переменными, которые видны в месте её определения). И эта функция может запоминать эти переменные "подолгу", и у другой функции-замыкании эти значения переменных уже будут свои.
Вот пример на питоне:
# Python
def make_counter():
count = 0
def add():
nonlocal count
count += 10
return count
return add
counter = make_counter()
print(counter()) # 10
print(counter()) # 20
Возвращаемый add будет помнить count из своего окружения. Такое же в JS, Kotlin и Go.
А что документация PHP нам говорит?
https://www.php.net/manual/en/functions.anonymous.php
Anonymous functions, also known as closures, allow the creation of functions which have no specified name. They are most useful as the value of callable parameters, but they have many other uses.
Согласно документации, замыкание в пыхе - это тупо анонимная функция 😂 Нафига так было писать?Честности ради можно сказать, что классическое замыкание в PHP можно повторить.
// PHP
function makeCounter() {
$count = 0;
return function() use (&$count) {
$count += 10;
return $count;
};
}
$counter = makeCounter();
echo $counter(); // 10
echo $counter(); // 20