Как передать значения в цикле в функцию ООП?

1

Я сталкиваюсь с трудностями в передаче данных внутри цикла foreach в функцию oop. Данные передаются через Ajax на php-страницу. Если ожидается, что данные будут переданы функции в классе из цикла foreach.

Для данных без цикла это то, как я перехожу к функции ООП, а затем вставляю их в базу данных.

echo $car_name=$data["car_name"];
echo $car_maker=$data["car_maker"];
echo $car_type=$data["car_type"];
echo $passanger=$data["passanger"];

$car=new car($car_name,$car_maker,$car_type,"Red",$passanger);
$car->addCar();

 public function __construct($param1,$param2,$param3,$param4,$param5,$param6)
    {
        $this->name=$param1;
        $this->maker=$param2;
        $this->type=$param3;
        $this->colour=$param4;
        $this->passanger=$param5;
        $this->rate=$param6;
        connection::addConnection();
    }
    public function addCar()
    {

        $sql="INSERT INTO car(car_name,car_maker,car_type,car_colour,num_passanger)VALUES('{$this->name}','{$this->maker}', '{$this->type}','{$this->colour}','{$this->passanger}')";
        $stmt =connection::$pdo->prepare($sql);
        $stmt->execute();
        echo "Data inserted!";
        //$this->rentalRate();
    }

Но для тех, кто в цикле.

$rate=$data["rate"];
foreach($rate as $key=>$value)
{
    echo $key."->";
    echo $value;
    $car->rentalRate($value);// how do I pass this value into the function rentalRate()?
}

//как вставить здесь значение цикла?

public function rentalRate()
    {
        echo $this->rate;

        $sql="INSERT INTO rental(day_1,day_3,day_7,day_15,day_30)VALUES('{$this->rate}','{$this->rate}', '{$this->rate}','{$this->rate}','{$this->rate}')";
        $stmt =connection::$pdo->prepare($sql);
        $stmt->execute();

    }

Моя функция полного ООП:

<?php
interface db
{
    public static function addConnection();
}
interface rental
{
    public function addCar();
    public function rentalRate();

}
abstract class report
{
    public function generateReport()
    {
        echo "All done.Now generate report.";
    }
}

class connection implements db 
{
    public static $servername = "localhost";
    public static $username = "root";
    public static $password = "";
    public static $dbname = "carrental";
    public static $port="3306";
    public static $pdo;

    public static function addConnection()
    {
      try 
      {
          self::$pdo = new PDO("mysql:host=localhost;port=3306;dbname=carrental", self::$username, self::$password);
          self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      } catch(PDOException $e)
      {
          echo 'ERROR: ' . $e->getMessage();
      }

      self::$pdo->query("use carrental");

    }
}

class car extends report implements rental
{
    public $name;
    public $maker;
    public $type;
    public $colour;
    public $passanger;
    public $rate;

    public function __construct($param1,$param2,$param3,$param4,$param5,$param6)
    {
        $this->name=$param1;
        $this->maker=$param2;
        $this->type=$param3;
        $this->colour=$param4;
        $this->passanger=$param5;
        $this->rate=$param6;
        connection::addConnection();
    }
    public function addCar()
    {

        $sql="INSERT INTO car(car_name,car_maker,car_type,car_colour,num_passanger)VALUES('{$this->name}','{$this->maker}', '{$this->type}','{$this->colour}','{$this->passanger}')";
        $stmt =connection::$pdo->prepare($sql);
        $stmt->execute();
        echo "Data inserted!";
        //$this->rentalRate();
    }
    public function rentalRate()
    {
        echo "Rate inserted!";
        $this->generateReport();
        echo $this->rate;

        $sql="INSERT INTO rental(day_1,day_3,day_7,day_15,day_30)VALUES('{$this->rate}','{$this->rate}', '{$this->rate}','{$this->rate}','{$this->rate}')";
        $stmt =connection::$pdo->prepare($sql);
        $stmt->execute();

    }
}

?>
  • 0
    Просто для пояснения, вы хотите, чтобы $value был доступен через $this->rate ?
Теги:
oop

1 ответ

1
Лучший ответ

Поскольку car::$rate является общедоступным, одним из способов было бы просто изменить его ценность:

$car->rate = $value;
$car->rentalRate();

Однако я считаю это довольно грязной реализацией и предлагаю вместо этого фактический аргумент.
Я предполагаю, что вы слышали о значениях по умолчанию для аргументов функции, таких как

function whatever($myvar = 'default') {}

Теперь, к сожалению, вы не можете использовать такие значения, как $this->rate как значения по умолчанию (кроме HHVM), но вы можете использовать "специальное" значение, чтобы указать, что никакой параметр не передан, например NULL, например:

public function rentalRate($rate = NULL)
{
    $rate = $rate == NULL ? $this->rate : $rate;
    echo "Rate inserted!";
    $this->generateReport();
    echo $rate;
    $sql="INSERT INTO rental(day_1,day_3,day_7,day_15,day_30)VALUES('{$rate}','{$rate}', '{$rate}','{$rate}','{$rate}')";
    $stmt =connection::$pdo->prepare($sql);
    $stmt->execute();
}

Если rentalRate теперь вызывается с аргументом, он будет использовать это как курс, а если нет, он будет использовать $this->rate вместо этого.

Кроме того, если вы не понимаете эту строку:

$rate = $rate == NULL ? $this->rate : $rate;

Это просто ленивый способ писать

if($rate == NULL)
{
    $rate = $this->rate;
}

См.: Тернарный оператор.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню