Я сталкиваюсь с трудностями в передаче данных внутри цикла 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();
}
}
?>
Поскольку 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;
}
См.: Тернарный оператор.
$value
был доступен через$this->rate
?