在php中实例化一个私有类

时间:2017-04-13 20:46:05

标签: php class private instantiation

我正在尝试使用私有内部变量访问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();

3 个答案:

答案 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。要设置私有属性,您需要编写设置该私有属性的类方法。

吸气剂和二传手

您可以编写两种方法getBarksetBark(可能是最自我记录的方法),前者将返回$_bark而后者将返回$bark }参数并将$this->_bark设置为$bark

示例:

public function getBark() {
    return $_bark;
}

public function setBark($bark) {
    $this->_bark = $bark;
}

组合getter和setter

或者,您可以将getset方法结合使用,只需使用您目前拥有的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属性,但真的不应该这样做。