我写了下一个单身人士。
class Singleton {
// object instance
private static $instance;
private function __construct() {}
private function __clone() {}
private $val = 'he';
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new Singleton();
self::$instance->val .= 'llo';
}
return self::$instance;
}
public function doAction() {
echo $this->val;
}
}
Singleton::getInstance()->doAction();
当我得到它的实例时,我将'llo'添加到私有属性val。并看到'你好'而不是'他',为什么我可以访问私有方法?
答案 0 :(得分:1)
如果是全班,则访问私人范围。它不受私人/受保护/公共方法的限制。因此,您可以从班级内部访问任何私人成员,但不能从班级外部访问。
您可以阅读http://php.net/manual/en/language.oop5.visibility.php
中的详细信息class Singleton {
// object instance
private static $instance;
private function __construct() {}
private function __clone() {}
private $val = 'he';
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new Singleton();
self::$instance->val .= 'llo'; // Inside the same class you can access private variable
}
return self::$instance;
}
public function doAction() {
echo $this->val;
}
}
Singleton::getInstance()->doAction();
echo Singleton::getInstance()->val; // can't access