2011-04-30 274 views
2

我正在學習面向對象,這是我的第一個學習項目。如何在Math類中創建減法方法?

我創建了一個Math類並創建了一個add方法。但是,當我試圖創建一個減法方法時,我不知道我在哪裏得到一個問題。

請提供幫助,並告知我可以從哪裏獲得有關面向對象的更多詳細信息。

<?php 

class Math 
{ 
    /** 
    * 
    * @return int 
    */ 
    function add() 
    { 
     $args = func_num_args(); 
     $sum = 0; 
     $i = 0; 

     for ($i; $i < $args; $i++) 
     { 
      is_int(func_get_arg($i)) ? $sum += func_get_arg($i) : die('use only integers, please'); 
     } 
     return $sum; 
    } 

    function subtract() 
    { 
     $args = func_num_args(); 
     $sub = 0; 
     $i = 0; 

     while($i < $args) 
     { 
      $sub = func_get_arg($i); 
      if (is_int(func_get_arg($i))) 
      { 
       is_int($sub - func_get_arg($i)); 
      }  
     } 
     $i++; 
     return $sub; 
    } 
} 

我在我的index.php調用這個類是這樣的:

<?php 
    include("Math.php"); 

     $c = new Math(); 
     $result = $c->subtract(100,10,20,45); 

     echo $result; 
?> 
+0

應的結果是什麼你減去以上給出的值的方法? – Bart 2011-04-30 14:21:00

+0

您的Math對象沒有可以在其上運行方法的自己的內部狀態。這與OOP無關。你基本上只是將一些或多或少的相關函數分組到一個類中。 – Gordon 2011-04-30 14:21:04

+0

'while'中的代碼 - 你用每個參數覆蓋$ sub,除此之外沒有更多的「=」。 – 2011-04-30 14:21:24

回答

3

這裏有幾個小問題:

  1. 你的循環永遠不會終止,因爲$ i的遞增是while循環之外。
  2. 首次設置$ sub應該在while循環之前發生。我假設你的減法函數是爲了從第一個參數中減去後面的參數。現在,$ sub在循環中每次都被重置。
  3. $ sub的值永遠不會被循環中的減法操作更新。您需要根據減法爲$ sub分配一個新值。您可以使用 - =簡寫符號,就像您在add()方法中使用+ =簡寫符號一樣。

A工作液應該是這樣的:

$sub = func_get_arg($i);   // At this point $i == 0 

while ($i < $args) {    // Loop while $i is less than the number of args 
    $i++;       // Increment $i 
    $operand = func_get_arg($i); // Name the argument for clarity 

    if (is_int($operand)) {  // Make sure the $operand is an integer 
     $sub -= $operand;   // Update $sub by subtracting $operand from it 
    } else { 
     // Do some error handling here... 
    } 
} 
+0

謝謝你的驚人工作 – Muzammil 2011-05-01 08:38:54

1

功能行is_int($sub - func_get_arg($i));不正確。我想你打算將這個作爲一個三元運算符並添加額外的邏輯。這裏是我的改寫:

public function subtract() { 
    $args = func_get_args(); 
    $sub = array_shift($args); 
    foreach ($args as $arg) { 
     is_int($sub - $arg) and $sub -= $arg 
     or die('use only integers please'); 
    } 
    return $sub; 
} 
+0

謝謝先生... – Muzammil 2011-05-01 08:39:15

0

你也做,使用array_reduce()bcsub()(或其他減法功能):

$sub = array_reduce(array_slice(func_get_args(), 1), 'bcsub', func_get_arg(0)); 
+0

非常感謝你@Alix Axel – Muzammil 2011-05-01 08:40:12