封装性是PHP面向对象编程中的三大特性之一,封装就是把对象中的成员属性和成员方法加上访问修饰符,使其尽可能隐藏对象的内部细节,以达到对成员的访问控制,且不是拒绝访问。
将一些特殊的方法加上关键字private修饰,就不能在对象外部使用,只能在对象内部调用。
class wifeClass {
// 成员属性
public $name;
private $age;
private $sex;
function __construct( $name, $age, $sex='女' ) {
echo "构造方法
";
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
public function setSex( $sex ) {
if ( !($sex=='男' or $sex == '女') ) return;
$this->sex = $sex;
}
public function getAge() {
if ( $this->age < 20 ) {
return $this->age;
}
elseif ( $this->age > 30 ) {
return $this->age-5;
}
}
private function say() {
echo "{$this->name} 说话了:我是{$this->sex}性,{$this->getAge()}岁了(其实是{$this->age}岁了)。
";
}
public function run() {
$this->run_left();
$this->run_right();
$this->run_go();
}
private function run_left() {
echo '迈左脚
';
}
private function run_right() {
echo '迈右脚
';
}
private function run_go() {
echo '前进
';
}
// 成员方法
public function eat( $rou, $cai ) {
echo "{$this->name} 吃饭了
";
// private 只能在内部调用
$this->say();
}
function __destruct() {
echo "{$this->name} 再见!
";
}
}
$wife = new wifeClass('Nox', '31');
// 对象内部调用private
$wife->eat( '鸡肉', '蘑菇' );
// 对象内部调用private
$wife->run();
// 无法在外部读取
// echo $wife->sex();
// 只允许改男女
$wife->setSex('男');
$wife->eat( '鸡肉', '蘑菇' );
/*
打印结果:
构造方法
Nox 吃饭了
Nox 说话了:我是女性,26岁了(其实是31岁了)。
迈左脚
迈右脚
前进
Nox 吃饭了
Nox 说话了:我是男性,26岁了(其实是31岁了)。
Nox 再见!
*/