Use accessor methods to assign property values
Aug 24, 2020
PHP
Put a value in a class property
If you create an instance with a class and put a value in a property *** Instance -> property name = value; can be implemented by ***.
class CalBMI {
public $_weight; // weight (kg)
public $_height; // height (m)
public function __construct($weight,$height){
$this->_weight = $weight;
$this->_height = $height;
}
public function getBMI(){
return $this->_weight / ($this->_height * $this->_height);
}
}
require_once'CalBMI.php';
$calBMI = new CalBMI(60,1.6);
echo $calBMI->getBMI(); //23.4375
However, users don’t always work as expected. So sometimes I put a letter where I put a number
require_once'CalBMI.php';
$calBMI = new CalBMI(60,'height');
echo $calBMI->getBMI(); // Warning: A non-numeric value encountered
To prevent such scandals, the properties of the class are basically private and cannot be directly accessed by the user. Access using *** accessor method ***.
class CalBMI {
private $_weight; // weight (kg)
private $_height; // height (m)
public function __construct($weight,$height){
$this->setWeight($weight);
$this->setHeight($height);
}
public function setWeight($weight){
$this->_weight = is_numeric($weight)? $weight :60; // If anything other than numbers is entered, set 60 to weight with Default
}
public function setHeight($height){
$this->_height = is_numeric($height)? $height :1.6; // If anything other than numbers enters, set 1.6 as height with Default
}
public function getWeight(){
return $this->_weight;
}
public function getHeight(){
return $this->_height;
}
public function getBMI(){
return $this->getWeight() / ($this->getHeight() * $this->getHeight());
}
}
require_once'CalBMI.php';
$calBMI = new CalBMI(60,'height');
echo $calBMI->getBMI(); // 23.4375
#Reference Self-study PHP 3rd Edition