PHP 中 class 的增量问题
problem with Incrementation in class in PHP
我正在学习PHP,我有两个class我想每次实例化一个class并调用“getNbVehicules()”方法来显示数量创建的实例。问题是,它似乎不能正常工作,因为当我调用该方法时只出现“1”。请帮助我。
<?php
class Vehicule{
private $marque;
private $couleur;
private $annee;
private $nbVehicules;
public function __construct($uneMarque, $uneCouleur, $uneAnnee){
$this->marque=$uneMarque;
$this->couleur=$uneCouleur;
$this->annee=$uneAnnee;
$this->nbVehicules=0;
}
public function getMarque(){
return $this->marque;
}
public function getCouleur(){
return $this->couleur;
}
public function getAnnee(){
return $this->annee;
}
public function getNbVehicules(){
return $this->nbVehicules+=1;
}
public function __toString(){
$message = "";
$message.= "Marque du vehicule: ".$this->marque." / Couleur du vehicule: ".$this->couleur." / Annee du vehicule: ".$this->annee;
return $message;
}
}
class Voiture extends Vehicule{
private $proprio;
function __construct($uneMarque, $uneCouleur, $uneAnnee, $unProprio){
parent::__construct($uneMarque, $uneCouleur, $uneAnnee);
$this->proprio=$unProprio;
}
function getProprio(){
return $this->proprio;
}
}
$vehicule1 = new Vehicule("Nissan", "Bleu", 2021);
echo "<p> Vehicule [".$vehicule1->getNbVehicules()."]</p>";
echo $vehicule1->__toString();
//
$vehicule2 = new Voiture("Honda", "Rouge", 2020, "Jean");
echo "<p> Vehicule [".$vehicule2->getNbVehicules()."]</p>";
echo $vehicule2->__toString();
echo " / Proprietaire: ".$vehicule2->getProprio();
?>
每个 Vehicule
都有自己的 $nbVehicules
值,该值设置为 0
并且从未修改过。所以基本上 getNbVehicules()
被硬编码为总是 return 1
.
首先,创建值 static
,这样就有一个与 Vehicule
的任何特定实例无关的单个计数,并将其初始化为 0
:
private static $nbVehicules = 0;
然后,因为你想让它计算创建实例的数量,所以在构造函数中增加它,而不是在你阅读它的任何时候:
public function __construct($uneMarque, $uneCouleur, $uneAnnee){
$this->marque=$uneMarque;
$this->couleur=$uneCouleur;
$this->annee=$uneAnnee;
self::$my_static += 1;
}
然后有一个static
方法读取值:
public static function getNbVehicules(){
return self::nbVehicules;
}
读取值将是一个 static
操作,与任何给定实例无关:
echo "<p> Vehicule [".Vehicule::getNbVehicules()."]</p>";
我正在学习PHP,我有两个class我想每次实例化一个class并调用“getNbVehicules()”方法来显示数量创建的实例。问题是,它似乎不能正常工作,因为当我调用该方法时只出现“1”。请帮助我。
<?php
class Vehicule{
private $marque;
private $couleur;
private $annee;
private $nbVehicules;
public function __construct($uneMarque, $uneCouleur, $uneAnnee){
$this->marque=$uneMarque;
$this->couleur=$uneCouleur;
$this->annee=$uneAnnee;
$this->nbVehicules=0;
}
public function getMarque(){
return $this->marque;
}
public function getCouleur(){
return $this->couleur;
}
public function getAnnee(){
return $this->annee;
}
public function getNbVehicules(){
return $this->nbVehicules+=1;
}
public function __toString(){
$message = "";
$message.= "Marque du vehicule: ".$this->marque." / Couleur du vehicule: ".$this->couleur." / Annee du vehicule: ".$this->annee;
return $message;
}
}
class Voiture extends Vehicule{
private $proprio;
function __construct($uneMarque, $uneCouleur, $uneAnnee, $unProprio){
parent::__construct($uneMarque, $uneCouleur, $uneAnnee);
$this->proprio=$unProprio;
}
function getProprio(){
return $this->proprio;
}
}
$vehicule1 = new Vehicule("Nissan", "Bleu", 2021);
echo "<p> Vehicule [".$vehicule1->getNbVehicules()."]</p>";
echo $vehicule1->__toString();
//
$vehicule2 = new Voiture("Honda", "Rouge", 2020, "Jean");
echo "<p> Vehicule [".$vehicule2->getNbVehicules()."]</p>";
echo $vehicule2->__toString();
echo " / Proprietaire: ".$vehicule2->getProprio();
?>
每个 Vehicule
都有自己的 $nbVehicules
值,该值设置为 0
并且从未修改过。所以基本上 getNbVehicules()
被硬编码为总是 return 1
.
首先,创建值 static
,这样就有一个与 Vehicule
的任何特定实例无关的单个计数,并将其初始化为 0
:
private static $nbVehicules = 0;
然后,因为你想让它计算创建实例的数量,所以在构造函数中增加它,而不是在你阅读它的任何时候:
public function __construct($uneMarque, $uneCouleur, $uneAnnee){
$this->marque=$uneMarque;
$this->couleur=$uneCouleur;
$this->annee=$uneAnnee;
self::$my_static += 1;
}
然后有一个static
方法读取值:
public static function getNbVehicules(){
return self::nbVehicules;
}
读取值将是一个 static
操作,与任何给定实例无关:
echo "<p> Vehicule [".Vehicule::getNbVehicules()."]</p>";