我正在尝试使用私有内部变量访问Dog类,我试图在底部实例化这些变量,虽然它确实运行它并没有改变“响亮地”咆哮“对于树皮,任何人都可以解释为什么会发生这种情况?
__ construct故意留空
class Dog {
private $_bark='loud'; //how loud the bark is
private $_goodBoy='yes';//how well dog behaves
private $_wetnessOfNose='moist';//how wet the dog nose is
public function __construct() {
}
public function bark() {
// retrieves how loud the bark is
return $this->_bark;
}
public function goodboy() {
// retrieves status of dog behavior
return $this->_goodBoy;
}
public function nose() {
// retrieves how wet dogs nose is
return $this -> _wetnessOfNose;
}
}
$myDog= new Dog();
$myDog->bark('LOUD');
echo "myDog's bark is " . $myDog->bark();
答案 0 :(得分:0)
您没有更改变量$_bark
的值,而是返回一个。当没有任何东西要提供时,你正在为函数bark
提供参数。
class Dog {
private $_bark='loud'; // how loud the bark is
private $_goodBoy='yes'; // how well dog behaves
private $_wetnessOfNose='moist'; // how wet the dog nose is
public function setBark($newBark){
//sets how loud the bark is
$this->_bark = $newBark;
}
public function bark(){
//retrieves how loud the bark is
return $this->_bark;
}
public function goodboy(){
//retrieves status of dog behavior
return $this->_goodBoy;
}
public function nose(){
//retrieves how wet dogs nose is
return $this -> _wetnessOfNose;
}
}
$myDog= new Dog();
$myDog->setBark('LOUD');
echo "myDog's bark is " . $myDog->bark();
答案 1 :(得分:0)
您的bark()
似乎是吸气者,而不是设定者,所以通话
$myDog->bark('LOUD');
完全没有意义,因为它缺乏使用返回值+你试图传递参数,即使没有任何期望它。
将getBark()
和setBark()
等设置者命名为bark()
,以避免出现类似问题,并删除当前public function getBark(){
return $this->_bark;
}
public function setBark($bark){
$this->_bark = $bark;
}
并引入
{{1}}
答案 2 :(得分:0)
你写过getter,但不是setter。要设置私有属性,您需要编写设置该私有属性的类方法。
您可以编写两种方法getBark
和setBark
(可能是最自我记录的方法),前者将返回$_bark
而后者将返回$bark
}参数并将$this->_bark
设置为$bark
。
示例:强>
public function getBark() {
return $_bark;
}
public function setBark($bark) {
$this->_bark = $bark;
}
或者,您可以将get
和set
方法结合使用,只需使用您目前拥有的bark
方法。它应该使用$bark
参数并使用PHP isset()
function检查它是否null
,然后将$_bark
设置为$bark
并退出方法而不返回任何内容。如果参数$bark
不设置,则只返回私有属性$_bark
的值。因此,基本上,它涵盖了两种方法的职责。
此方法可以调用为$myDog->bark()
,以获取$_bark
,或的值,称为$myDog->bark('LOUD');
,以设置$_bark
的值到'LOUD'
。
示例:强>
public function bark($bark) {
if (isset($bark)) { // If you've supplied a $bark parameter...
$this->_bark = $bark; // Set $_bark to the value of the parameter
return; // Exit the method without returning anything (does not continue outside of the if statement
}
return $this->_bark; // No parameter was supplied, so just return the value of $_bark
}
最后,您可以公开_bark
属性,但真的不应该这样做。