Php 如何在数学课上创建减法?

Php 如何在数学课上创建减法?,php,oop,class,methods,subtraction,Php,Oop,Class,Methods,Subtraction,我正在学习OOP,这是我的第一个学习项目 我创建了一个数学类,还创建了一个add方法。但是当我尝试创建一个减法时,我不知道我在哪里遇到了问题 请帮助我,并给我的信息,我可以得到更多关于OOP的详细信息 <?php class Math { /** * * @return int */ function add() { $args = func_num_args(); $sum = 0;

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

我创建了一个数学类,还创建了一个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;
    }
}

我建议您观看此视频


这可能有助于您更好地理解OOP,讲座中的一个示例与您正在尝试制作的示例非常相似。

函数行
为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;
}

这里有几个小问题:

  • 您的循环永远不会终止,因为$i的增量超出了您的while循环
  • $sub的首次设置应在while循环之前进行。我假设你的减法函数是要从第一个参数中减去后一个参数。现在,$sub在循环中的每次传递都会重置
  • $sub的值永远不会被循环中的减法操作更新。您需要根据减法为$sub指定一个新值。您可以使用-=速记,就像在add()方法中使用+=速记一样
  • 可行的解决方案如下所示:

    <?php
        include("Math.php");
    
            $c = new Math();
            $result = $c->subtract(100,10,20,45);
    
            echo $result;
    ?>
    
    $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...
        }
    }
    
    $sub=func\u get\u arg($i);//此时$i==0
    while($i<$args){//循环,而$i小于args的数量
    $i++;//增量$i
    $operand=func\u get\u arg($i);//为清楚起见,请命名参数
    如果(is_int($operand)){//请确保$operand是整数
    $sub-=$operand;//通过从$sub中减去$operand来更新$sub
    }否则{
    //在这里做一些错误处理。。。
    }
    }
    
    您也可以使用and(或其他减法功能)完成此操作:


    对于上面给出的值,您的减法方法的结果应该是什么?您的数学对象没有自己的内部状态,这些方法可以对其进行操作。这与OOP无关。基本上,您只需将一些或多或少相关的函数分组到“while”中的class.code中,您可以通过每个参数覆盖$sub,这里不再有“=”。$i++;放置在“while”之后,因此$i将始终小于$args@Bart:我猜是
    25
    -175
    ,但
    25
    似乎更有可能。
    $sub = array_reduce(array_slice(func_get_args(), 1), 'bcsub', func_get_arg(0));