2011-04-30 5 views
1

Хорошо, я закодировал это решение для pythagoras-solver, и мне было интересно, как я могу его улучшить, или сделать его более эффективным?PHP Math Pythagoras

<?php 
    $sides = array('1' => 'Hypotenuse', 
     '2' => 'Adjacent', 
     '3' => 'Opposite'); 

    function createSideDropdown($name) { 
     global $sides; 
     $option = "<select name='".$name."'>"; 
      if(!empty($sides)) { 
       foreach($sides as $id => $sideDesc) { 
        $option .= "<option value='".$id."'>".$sideDesc."</option>"; 
       } 
      } else { 
       die("Error fetching sides!"); 
      } 
     $option .= "</select>"; 
     echo $option; 
    } 

    try { 
     if(!empty($_POST['submit'])) { 
      if(empty($_POST['val1']) || empty($_POST['val2'])) { 
       throw new Exception("Please enter an integer in both boxes."); 
      } 
      if(!is_numeric($_POST['val1']) || !is_numeric($_POST['val2'])) { 
       throw new Exception("One of the numbers you entered is not a valid integer."); 
      } 

      $val1 = $_POST['val1']; 
      $val2 = $_POST['val2']; 
      $val1numtype = $_POST['val1type']; 
      $val2numtype = $_POST['val2type']; 
      $val1nametype = $sides[$val1numtype]; 
      $val2nametype = $sides[$val2numtype]; 

       if($val1numtype == $val2numtype) { 
        throw new Exception("The two sides of the triangle must be different"); 
       } 

       if($val1nametype == "Hypotenuse" || $val2nametype == "hypotenuse") { 
        // work out a small side 
        $bignum = max($val1, $val2); 
        $smallnum = min($val1, $val2); 
        $sqTotal = ($bignum * $bignum) - ($smallnum * $smallnum); 
        $total = sqrt($sqTotal); 
        echo $bignum."&sup2; - ".$smallnum."&sup2; = ".$sqTotal."<br /> 
        &radic;".$sqTotal." = ".$total.$_POST['mes']; 
       } else { 
        // work out the hypotenuse 
        $sq1 = $val1 * $val1; 
        $sq2 = $val2 * $val2; 
        $sqTotal = $sq1 + $sq2; 
        $total = sqrt($sqTotal); 
        echo $val1."&sup2; + ".$val2."&sup2; = ".$sqTotal."<br /> 
        &radic;".$sqTotal." = ".$total.$_POST['mes']; 
       }  
      echo "<br /><br />"; // Seperate the working out from the input 
     } 
    } catch(Exception $e) { 
     echo $e->getMessage()."<br/><br/>"; 
    } 


?> 
<form method='POST' action='index.php'> 
Value 1: <input type='text' name='val1' /> 
<?php createSideDropdown("val1type"); ?> 
<br /><br /> 

Value 2: <input type='text' name='val2' /> 
<?php createSideDropdown("val2type"); ?> 
<br /> 
<select name="mes"> 
<option name="mm">mm</option> 
<option name="cm">cm</option> 
<option name="m">m</option> 
<option name="cm">km</option> 
</select> 
<br /> 

<input type="submit" name="submit" /> 
</form> 
?> 

ответ

1

Ну, одна вещь, которую вы, конечно, можете сделать это:

HTML самостоятельно и PHP сама по себе - отдельно, что. И тогда я продолжу смотреть на остальных.

Кроме того, вы можете делать исключения из JavaScript - я имею в виду, использовать JavaScript для синтаксического анализа текстовых полей и записи ошибок с помощью JavaScript. Вместо того, чтобы всегда представлять форму. - Тем не менее вы также должны разбирать поля в PHP.

Затем сделать класс из него и сделать надлежащую документацию о нем, таких как

/** 
* This method does bla 
* @param Int a 
*/ 

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

+0

Спасибо. Есть ли какие-либо ресурсы относительно стандартов комментариев? Я видел @param и все вокруг, но никогда не исследовал его. – Joshwaa

+0

@ Joshwaa посмотрите на это: http://en.wikipedia.org/wiki/PHPDoc#Tags – Richard

+0

Поскольку это вопрос для начинающих, я бы добавил обычную причину для проверки действительности как в JavaScript на клиенте, так и в PHP (или что-то еще) на сервере: проверка на клиенте обычно приводит к лучшему опыту пользователя, но проверка на сервере по-прежнему требуется, потому что любой клиент может быть использован для отправки на сервер. Только серверный код (возможно) защищен, поэтому проверки безопасности должны выполняться на стороне сервера (хотя вы можете избыточно реализовать проверку безопасности на стороне клиента, если это улучшит работу пользователя). – jimhark