【问题标题】:problem with Incrementation in class in PHPPHP中类中的增量问题
【发布时间】:2021-10-11 08:31:43
【问题描述】:

我正在学习PHP,我有两个类,我希望每次实例化一个类并调用“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();

?>

【问题讨论】:

    标签: php class increment


    【解决方案1】:

    每个Vehicule 都有自己的$nbVehicules 值,该值设置为0 并且从未修改过。所以基本上getNbVehicules() 被硬编码为总是返回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>";
    

    【讨论】:

    • 感谢@David 的回答。
    猜你喜欢
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 2023-03-21
    • 2021-05-15
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多