PHP/JS выполнение функции/проверки в самой переменной

133
06 марта 2018, 04:56

Здравствуйте, подскажите как называется следующий синтаксис, когда непосредственно переменная играет роль функции:

$arr = array_filter(explode(' ', trim($str)), function($v) {
        return mb_strlen($v) > 1;
    });

И ответьте пожалуйста на второй вопрос, есть ли полная проверка if else, которую так же можно произвести через переменную, подобно тернарной, то есть:

$a = if($b = 0) {
//присваиваем $a = 0
 return 0;
} else {
//присваиваем $a = 1
 return 1;
}
Answer 1

когда непосредственно переменная играет роль функции

геттеры/сеттеры
getters/setters

php

 class Animal {
  function __get($property) {
    //...
  }
  function __set($property, $value) {
    //...
  }
}
$cow = new Animal;
$cow->weight = '1 ton'; // same as $cow->__set('weight', '1 ton')
print $cow->weight;     // same as print $cow->__get('weight');
  • php.net/manual

  • Getter’ы и Setter’ы — магия, которая должна знать свое место

js

let obj = {
    conteiner: {},
    get name() { return this.conteiner.name },
    set name(_name) {
        let type = typeof _name
        if ('string' == type) {
            this.conteiner.name = _name
            console.log('_name строка');
        } else if ('number' == type) {
            this.conteiner.name = ''+_name
            console.log('_name чисто');
        } else {
            this.conteiner.name = null
            console.log('невалидный _name');
        }
    },
}
obj.name = []
console.log(obj.name);
obj.name = 7
console.log(obj.name);
obj.name = 'qwa'
console.log(obj.name);
  • learn.javascript.ru

тернарный оператор

php

// Пример использования тернарного оператора
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
// Приведенный выше код аналогичен следующему блоку с использованием if/else
if (empty($_POST['action'])) {
    $action = 'default';
} else {
    $action = $_POST['action'];
}

js

let $action;
// Пример использования тернарного оператора
$action = (true) ? true : false
// Приведенный выше код аналогичен следующему блоку с использованием if/else
if (true) {
    $action = true
} else {
    $action = false
}
Answer 2

php:

В первом примере переменная $arr принимает результат ф-ции array_filter. Функцию в данном случае она не представляет. $arr будет присвоен отфильтрованный массив. Называйте это присваиванием:

$arr = array_filter(explode(' ', trim($str)), function($v) {
    return mb_strlen($v) > 1;
});

А это вообще не имеет никакого смысла:

$a = if($b = 0) {
//присваиваем $a = 0
    return 0;
} else {
//присваиваем $a = 1
    return 1;
}

Присваивание через тернарный оператор выглядит так:

$a = ($b == 0) ? 0 : 1; // сравнение $b и присваивание $a
// $a = 0
$a = ($b = 0) ? 0 : 1; // присваивание $b,сравнение и присваивание $a
// $a = 1

Если говорить про "синтаксис, когда непосредственно переменная играет роль функции", это называется переменная функции:

function foo(int $param) {
    return $param + 1;
}
$foo = 'foo'; // теперь переменная $foo вызовет функцию foo()
echo $foo(1); // 2

Так же в языке присутствуют анонимные функции:

$a = function(int $param) {
    return $param + 1;
};
var_dump($a(1)); // int(2)
READ ALSO
Постоянное значение переменной

Постоянное значение переменной

Необходимо сделать скрипт позволяющий пользователю при нажатии на кнопку менять значение у переменной, причем не только у него, а вообще...

167
MySql выборка с множественной подгруппой

MySql выборка с множественной подгруппой

На примере конструкции сайта с объявлениями

144
Как лучше всего скрыть не нужные поля?

Как лучше всего скрыть не нужные поля?

Доброго времени сутокПоля сайта пополняются через API перебором массива через цикл foreach

137
An Error occurred while handling another error: exception 'yii\web\HeadersAlreadySentException&#039

An Error occurred while handling another error: exception 'yii\web\HeadersAlreadySentException&#039

Установил Yii2 и OpenServerНастройки: Apache 2

251