面向对象(二)封装性

<?php

//面向对象三大特性
//封装
//目的:让类更加安全,不让外界直接访问类里面的成员变量
//做法:


//1.把成员变量、方法做成私有的
class Person 
{
	public $name;
	private $sex;
	private $age;
	
	function __construct($name="",$sex="男",$age=10)
	{
		$this->name=$name;
		$this->sex=$sex;
		$this->age=$age;
	}
	
	function run()
	{
		echo $this->name."在走路时,".$this->leftleg()."再".$this->rightleg();
	}
	private function leftleg()
	{
		return "迈左腿";
	}
	private function rightleg()
	{
		return "迈右腿";
	}	
}
$p=new Person("张三");
var_dump($p);
echo $p->name."<br>";
//echo $p->sex."<br>"; //属性被封装,无法在类外面被调用
//echo $p->age."<br>";  //属性被封装,无法在类外面被调用
//echo $p->leftleg();    //属性被封装,无法在类外面被调用
//echo $p->rightleg();    //属性被封装,无法在类外面被调用
echo $p->run();




//2.做一个方法来实现变量取值或赋值,在方法里面加限制条件
class Person 
{
	public $name;
	private $sex;
	private $age;
	
	function __construct($name="",$sex="男",$age=10)
	{
		$this->name=$name;
		$this->sex=$sex;
		$this->age=$age;
	}
	
	//普通方法   只能给某一个属性进行赋值和取值
	function setage($a) //给age赋值的函数
	{
		if($a>1&&$a<50)
		{
			$this->age=$a;
		}
	}
	function getage()  //取age值的函数
	{
		return $this->age;
	}
	
	//魔术方法   可以给任何一种属性进行赋值和取值
	function __set($n,$v) //给类里的私有成员赋值:$n代表属性名,$v代表属性值,$this->$n=$v
	{
		if($n=="age")
		{
			if($v>1&&$v<50)
			{
				$this->$n=$v;
			}
		}
		else
		{
			$this->$n=$v;
		}
	}
	function __get($n)  //取类里的私有成员属性的值,$this->$n
	{
		return $this->$n;
	}
}
$p=new Person("李四","女",25);
var_dump($p);

//普通方法:
echo "赋值年龄".$p->setage(40)."<br>";
echo "取值年龄".$p->getage();
var_dump($p);

//魔术方法
echo "赋值性别".$p->sex="人妖"."<br>";
echo "取值性别".$p->sex;
var_dump($p);

  

posted @ 2016-04-28 17:00  坏小子1993  阅读(147)  评论(0编辑  收藏  举报