ここに私のコードです。私は経験していないので、簡単な言葉で答えを教えてください。PHPクラスのコンストラクタをオーバーライドするにはどうすればよいですか?
<?php
function println($message) {
echo "\n".$message;
}
printlnはエコーですが、メッセージの前に¥nが付いています。私は単にPython 3に慣れていますが、print()は使用できません。
class Car {
public function __construct($name) {
//If the constructor is that of a car, it will be said that a car was made.
println("Car made!");
$this->distance_drived = 0;
$this->name = $name;
}
function introductory() {
return "This car is called ".$this->name.".";
}
}
class Battery {
function __construct($max_capacity, $current_capacity) {
echo "Constructed!";
$this->max_capacity = $max_capacity;
$this->current_capacity = $current_capacity;
}
function fill($amount) {
if ($amount + $this->current_capacity >= $this->max_capacity) {
$this->fill_full();
} else {
$this->current_capacity += $amount;
}
}
function fill_full() {
$this->current_capacity = $this->max_capacity;
}
function use_power($amount) {
if ($amount + $this->current_capacity >= $this->max_capacity) {
return $this->current_capacity;
$this->current_capacity = 0;
} else {
$this->current_capacity -= $amount;
return $amount;
}
}
function check_percentage() {
return ($this->current_capacity/$this->max_capacity) * 100;
}
}
class ElectricCar extends Car {
public function __construct($name, $max_capacity, $current_capacity, $power_per_km) {
println("Electric car made!");
//If the constructor is that of an electric car, it will be said that a car was made.
$this->distance_drived = 0;
$this->name = $name;
println($max_capacity);
$this->battery = new Battery($max_capacity, $current_capacity);
}
public function move($km) {
$power_required = $km * $this->power_per_km;
$used = $battery->use_power($power_required);
$this->distance_drived += $used/$this->power_per_km;
}
}
$toyota = new Car("Toyota 2017");
println($toyota->name);
println($toyota->introductory());
$tesla = new Car("Tesla Model S", 1000, 750, 5);
println($tesla->introductory());
println("Capacity is ".$tesla->battery->max_capacity);
?>
私の主な問題は、メッセージがElectricCarのCarのメッセージのままであるため、__construct()が変更されなかったことです。
親のコンストラクタを呼び出すことです"、1000、750、5);'その後、少なくとも$ teslaオブジェクトをインスタンス化する正しいクラスを使用します – RiggsFolly
これをTYPOとして閉じることをお勧めします – RiggsFolly