Неправильное поведение PHP-скрипта

#php

#php

Вопрос:

У меня есть небольшой скрипт, который определяет вызываемую переменную $prPrice . Этот скрипт работает не так, как я предполагал, поскольку в некоторых продуктах, содержащих определенный код отдела, отображаются цены, относящиеся к другим кодам отдела. Поэтому я предполагаю, что то, как я изначально собрал это вместе, как-то неправильно.

Мой вопрос заключается в следующем: может ли кто-нибудь обнаружить проблему или предоставить предложения по улучшению следующего простого php-скрипта:

 // Cost plus 2.5%
if ($prDept = (204 || 205 || 209 || 1501 || 1601 )) {
    if ($_SESSION['tax'] == "on" || !isset($_SESSION['tax']))
        $prPrice = ((($prCost1 / 1.14) * 1.025) * 1.14);
    else if ($_SESSION['tax'] == "off" amp;amp; $prTaxable == "1")
        $prPrice = ($prCost1 * 1.025);
    else if ($_SESSION['tax'] == "off" amp;amp; $prTaxable == "0")
        $prPrice = (($prCost1 / 1.14) * 1.025);
  

}

Комментарии:

1. вы ничего не оптимизируете, ваш скрипт работает неправильно. en.wikipedia.org/wiki/Program_optimization

2. «Оптимизация» не является синонимом «исправления». И как мы должны вывести то, что вы намеревались, из кода, который, по вашему собственному признанию, этого не делает?

3. @Tomalak хорошая мысль и спасибо

Ответ №1:

 $prDept = (204 || 205 || 209 || 1501 || 1601)
  

Это не так, как это работает в PHP. Это действительно должно выглядеть так…

 $prDept == 204 || $prDept == 205 || $prDept == 209 || $prDept == 1501 || $prDept == 1601
  

или в качестве альтернативы,

 in_array($prDept, array(204, 205, 209, 1501, 1601))
  

Комментарии:

1. Эта ошибка происходит от распространенной английской ошибки «my A может быть X или Y или Z», которая на самом деле должна гласить «мой A может быть X, или мой A может быть Y, или мой A может быть Z». Прямая корреляция. Старайтесь не думать о языках программирования как об английском, потому что они не так снисходительны, когда вы удаляете логическую согласованность из своих выражений.

2. (Если вы действительно хотите подумать об английской версии, подходящей для обозначения языков программирования будет «my A может быть одним из значений X, Y или Z», где X, Y, Z — это множество (или массив, в данном случае).)

3. @Amber Я вижу, к чему вы клоните, я думаю, то, чего я пытался достичь, было бы чем-то более похожим на последнее. Я ценю ваш вклад и еще раз благодарю!

4. @Amber: Я пытался сделать более общую грамматическую корреляцию, но, конечно.

5. @Tomalak Скажем, например, было два набора этого скрипта, каждый из которых относился к разным отделам. Было бы лучше оформить это как if, иначе if . Или иметь его как два отдельных if?

Ответ №2:

 if ($prDept == 204 || $prDept == 205 || $prDept == 209 || $prDept == 1501 || $prDept == 1601) {
    if ($_SESSION['tax'] == "on" || !isset($_SESSION['tax'])) {
          $prPrice = ((($prCost1 / 1.14) * 1.025) * 1.14);
    } else if ($_SESSION['tax'] == "off" amp;amp; $prTaxable == "1") {
          $prPrice = ($prCost1 * 1.025);
    } else if ($_SESSION['tax'] == "off" amp;amp; $prTaxable == "0") {
          $prPrice = (($prCost1 / 1.14) * 1.025);
    }   
}
  

Ответ №3:

Я бы написал это как:

 $departments = array(204 , 205 , 209 ,1501, 1601);

if (in_array($prDept, $departments)) {
 ...
}