PHP面向对象三大特性之封装性

猫斯基  — PHP


封装性是面向对象编程中的三大特性之一,封装就是把对象中的成员属性和成员方法加上访问修饰符,使其尽可能隐藏对象的内部细节,以达到对成员的访问控制,且不是拒绝访问。

将一些特殊的方法加上关键字private修饰,就不能在对象外部使用,只能在对象内部调用。

class wifeClass {
	
	// 成员属性
	public $name;
	private $age;
	private $sex;
	
	function __construct( $name, $age, $sex='女' ) {
		echo "构造方法<br>";
		$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}岁了)。<br>";
	}
	
	public function run() {
		$this->run_left();
		$this->run_right();
		$this->run_go();
	}
	
	private function run_left() {
		echo '迈左脚<br>';
	}
	
	private function run_right() {
		echo '迈右脚<br>';
	}
	
	private function run_go() {
		echo '前进<br>';
	}
	
	// 成员方法
	public function eat( $rou, $cai ) {
		echo "{$this->name} 吃饭了<br>";
		// private 只能在内部调用
		$this->say();
	}
	
	function __destruct() {
		echo "{$this->name} 再见!<br>";
	}
	
}

$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 再见!
*/

阅读量:0 2021-01-22 22:59

返回顶部