[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: "Странный" синтаксис
Страницы: 1, 2
village_coder
Два года зарабатываю на этом поприще. Учился в общем по обычным учебникам.
Недавно пришлось немного модифицировать код форума SMF. Там встретил такое непонятное выражение:

$var_name['ключ'](<список параметров>);

Правильно сформулировать это поисковику я так и не смог.
Причем оно есть всюду. Вот пример подобного:

$smcFunc['db_insert']('',
'{db_prefix}log_banned',
array('id_member' => 'int', 'ip' => 'string-16', 'email' => 'string', 'log_time' => 'int'),
array($user_info['id'], $user_info['ip'], ($email === null ? ($user_info['is_guest'] ? '' : $user_info['email']) : $email), time()),
array('id_ban_log')
);


Скажите, я допустил большой пробел в базовом php образовании?
olimpset
Если работает, то нормально, ничего странного нету, просто много дужек, но не убирай, а то ошибка будет!
inpost
Напиши:
echo $smcFunc['db_insert'];
Скорее всего в переменной содержится имя функции.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
village_coder
Цитата (olimpset @ 23.03.2013 - 21:14)
Если работает, то нормально, ничего странного нету, просто много дужек, но не убирай, а то ошибка будет!

Вы не поняли. Я просто не понимаю что это за синтаксическая конструкция, а не пытаюсь заставить это работать по другому. Я просто никогда раньше не встречал массив-функцию ни в каком другом языке.
village_coder
Цитата (inpost @ 23.03.2013 - 21:17)
Напиши:
echo $smcFunc['db_insert'];
Скорее всего в переменной содержится имя функции.

Разве возможно так вызвать функцию?
inpost
function test($login) {
echo 'hello world Mr. '.$login;
}
$var = 'test'; // или $var = 'test()';
$var('inpost');


Писал на скорую руку, должно работать.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
village_coder
Цитата (inpost @ 23.03.2013 - 21:22)
function test($login) {
echo 'hello world Mr. '.$login;
}
$var = 'test'; // или $var = 'test()';
$var('inpost');


Писал на скорую руку, должно работать.

Невероятно! Не ожидал таких извращений. Знал про разные вызовы функций, но чтобы такое blink.gif

Спасибо огромное, вы только что предотвратили мой когнитивный диссонанс и вернули смысл жизни.
inpost
village_coder
Представь игру, типо ММОРПГ, в которой вешаются десяток дебафов на юнита, после необходимо просчитать каждый из них, значит дебаф имеет имя, а по имени вызывается нужная функция.
То есть ты пишешь не:
if($var[0] == 'fire') {function fire();}
а коротко:
$var[0]();
и т.д.

Банальный пример, но очень удобен, особенно когда в игре тысячи дебафов, и для каждого писать if( =='fire'), elseif( =='water') и т.д. - не удобно.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
village_coder
Цитата (inpost @ 23.03.2013 - 21:30)
village_coder
Представь игру, типо ММОРПГ, в которой вешаются десяток дебафов на юнита, после необходимо просчитать каждый из них, значит дебаф имеет имя, а по имени вызывается нужная функция.
То есть ты пишешь не:
if($var[0] == 'fire') {function fire();}
а коротко:
$var[0]();
и т.д.

Банальный пример, но очень удобен, особенно когда в игре тысячи дебафов, и для каждого писать if( =='fire'), elseif( =='water') и т.д. - не удобно.

Не судите строго, я воспитан на строгом синтаксисе Си/Си++, и для меня привычней первый вариант вызова.

К тому же в данном случае подойдет и такой вариант как call_user_func($var);
inpost
village_coder
Да, так тоже можно. Не забываем, PHP - это фреймворк C (и чуть-чуть С++), поэтому сделано больше возможностей с упрощенными действиями.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
village_coder
Цитата (inpost @ 23.03.2013 - 21:38)
village_coder
Да, так тоже можно. Не забываем, PHP - это фреймворк C (и чуть-чуть С++), поэтому сделано больше возможностей с упрощенными действиями.

Я бы сказал что PHP это очень-форк перла, а перл это галлюциногенное переосмысление С++
inpost
village_coder
Perl - это пхп1, пхп2+ С/С++

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
village_coder
Цитата (inpost @ 23.03.2013 - 21:44)
village_coder
Perl - это пхп1, пхп2+ С/С++

Хотя более-менее серьезный программист Си за такие слова бы убил и жестко надругался над телом ph34r.gif
Всё-таки Си - системный язык программирования. На нем написан линукс. На некоторых форумах и конференциях в жаббере нещадно баннят за одно упоминание PHP.
inpost
village_coder
Ты это к чему? Истории создания ПХП не знаешь, в чём тогда проблема?
Пришел троллить, не любят троллей на форуме нашем, увы.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
dron4ik
Цитата (village_coder @ 23.03.2013 - 17:25)
Невероятно! Не ожидал таких извращений. Знал про разные вызовы функций, но чтобы такое  blink.gif

По сути тоже самое что и $$var

$var = 'ret';
$$var = 1;
echo $ret; // вернет 1

_____________
Ex3m.com.ua — Активный образ жизни
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.