如何在数学类中创建减法方法?

发布于 2024-11-04 22:19:43 字数 1056 浏览 0 评论 0原文

我正在学习 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;
?>

I am studying OOP and this is my first study project.

I created a Math class and also created an add method. But when I am trying to create a subtract method I don't know where I am getting a problem.

Please kindly help and give me information where I can get more detailed information on 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;
    }
}

I am calling this class in my index.php like this:

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

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

        echo $result;
?>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

魄砕の薆 2024-11-11 22:19:43

这里有一些小问题:

  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...
    }
}

There are a few small problems here:

  1. Your loop won't ever terminate because the incrementing of $i is outside of your while loop.
  2. The setting of $sub the first time should happen before the while loop. I assume your subtraction function is meant to subtract the latter arguments from the first argument. Right now, $sub is reset every pass through the loop.
  3. $sub's value is never updated by the subtraction operation in your loop. You need to assign a new value to $sub based on the subtraction. You can use the -= shorthand for this just like you used the += shorthand in your add() method.

A working solution would look like this:

$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...
    }
}
握住我的手 2024-11-11 22:19:43

我建议您观看此视频
整洁代码讲座 - 继承、多态性和& ;测试

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

I would recommend for you to watch this video
The Clean Code Talks -- Inheritance, Polymorphism, & Testing.

This might help you to understand OOP better, and one of examples in the talk is very similar to one you are trying to make.

灼疼热情 2024-11-11 22:19:43

功能行 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;
}

The functional line is_int($sub - func_get_arg($i)); is incorrect. I think you intend to use this as a ternary operator and add additional logic. Here is my rewrite:

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;
}
风流物 2024-11-11 22:19:43

您也可以使用 array_reduce()bcsub() (或其他减法函数):

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

You could also do that using array_reduce() and bcsub() (or other subtraction function):

$sub = array_reduce(array_slice(func_get_args(), 1), 'bcsub', func_get_arg(0));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文