开发者

How to create a subtract method in a Math class?

开发者 https://www.devze.com 2023-03-02 11:02 出处:网络
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 proble

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开发者_如何学Python $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;
?>


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


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.


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


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));
0

精彩评论

暂无评论...
验证码 换一张
取 消