2

我正在学习 OOP,这是我的第一个学习项目。

我创建了一个 Math 类,还创建了一个 add 方法。但是当我试图创建一个减法时,我不知道我在哪里遇到了问题。

请帮助并给我信息,我可以在其中获得有关 OOP 的更多详细信息。

<?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;
?>
4

4 回答 4

3

这里有几个小问题:

  1. 您的循环永远不会终止,因为 $i 的递增在您的 while 循环之外。
  2. $sub 的第一次设置应该发生在 while 循环之前。我假设您的减法函数旨在从第一个参数中减去后一个参数。现在,$sub 每次循环都会被重置。
  3. $sub 的值永远不会被循环中的减法运算更新。您需要根据减法为 $sub 分配一个新值。您可以使用 -= 简写,就像在 add() 方法中使用 += 简写一样。

一个可行的解决方案如下所示:

$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...
    }
}
于 2011-04-30T14:38:09.270 回答
1

我建议您观看此视频
The Clean Code Talks -- Inheritance, Polymorphism, & Testing

这可能会帮助您更好地理解 OOP,并且演讲中的一个示例与您尝试制作的示例非常相似。

于 2011-04-30T14:20:13.340 回答
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;
}
于 2011-04-30T14:24:29.147 回答
0

您也可以使用array_reduce()and bcsub()(或其他减法函数)来做到这一点:

$sub = array_reduce(array_slice(func_get_args(), 1), 'bcsub', func_get_arg(0));
于 2011-04-30T15:05:29.960 回答