Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выполнить: значения аргументов + оператор(строкой), [мат. функция] 
V
    Опции темы
ressac
Дата 26.1.2008, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



вообщем функция получает три переменных, две цифры и знак операции (+,-,/, ....) 
 я пробывал делать с eval() но почему-то не получается :(
может кто-то показать?

з.ы. есть возможность выполнить тоже самое но без eval(), может ещё есть какие-то функции или методы.
PM MAIL   Вверх
ressac
Дата 26.1.2008, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



сделал с горем по пополам smile , забыл про ";"

Код

 echo oper($a,$b,$o);

 function oper ($a,$b,$o)
 {
    eval("\$a=".$a.$o.$b.";");
    return $a;
 }


может кто что добавит, и всё ещё интересует другой способ.
PM MAIL   Вверх
GeneralElectric
Дата 26.1.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



а операнды, разумеется, получаются от пользователя
PM MAIL   Вверх
Golda
Дата 26.1.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 20
Всего: 42



eval() лучше не использовать из соображений безопасности. Вы получите гораздо больший контроль над ситуацией, в частности в обработке ошибок, если обработаете возможные варианты по отдельности. Бинарных операций не так много 

Код


function calculate($op1, $op2, $operation) {
    if (!is_numeric($op1) || !is_numeric($op2)) {
        throw new Exception('Invalid operands');
    }
    
    switch ($operation) {
        case '+':
            return $op1 + $op2;
        case '-':
            return $op1 - $op2;
        case '*':
            return $op1 * $op2;
        case '/':
            if ($op2 == 0) {
                throw new Exception('divide by zero error');
            } else {
                return $op1 / $op2;
            }
        case '^':
            if ($op1 == 0 && $op2 <= 0 || !is_int($op2)) {
                throw new Exception('Invalid operands');
            } else {
                return pow($op1, $op2);
            }
        default:
            throw new Exception('Invalid operation');
    }
}


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

Это сообщение отредактировал(а) Golda - 26.1.2008, 13:44


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1201 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.