//面向过程
/*$r = 5;
$m = 3.14*$r*$r;*/
//类和对象
//对象:任何东西都可以称为对象,类实例化出来的东西
//类:对所有同类的对象抽象出来的东西
//Info: Code,Name,Sex,Nation,Birthday
//对象:一条具体的信息 p001 张三 男 汉族 1990-2-3
//定义类:
class Ren
{
	public $Name; //成员变量
	protected $age; 
	private $height;
	var $sex; //一般不要给成员变量赋值
	
	function __construct($s) //构造函数
	{
		$this->sex = $s;
	}
	function Run()  //成员函数(方法)
	{
		echo "这个人正在奔跑!";
	}
	function Say()
	{
		echo $this->Name."正在说话!";
	}
}
//使用类
//1.实例化对象
$r = new Ren("男");
//2.给成员变量赋值(调用成员变量)
$r->Name = ‘张三‘; //给对象的Name赋值
//echo $r->age;
var_dump($r);
//3.调用成员方法
$r->Say(); //执行成员方法
//访问修饰符
//1.如果要加访问修饰符,需要去掉var
//2.三种:public公有的  protected受保护的  private私有的
//3.如果不加访问修饰符,默认是public
//$this引用
//$this代表该对象(哪个对象调用),不是代表该类
	
//构造函数
//1.写法特殊:__construct()
//2.执行特殊:在造对象的时候最先执行
//作用:对对象进行初始化操作
class Ren
{
	private $name;
	private $sex;
	private $age;
	function __construct($s)
	{
		$this->sex = $s;
	}
	public function Say()
	{
		echo "hello";
	}
	function __destruct() //析构函数,对象销毁前执行
	{
		echo "该对象销毁了!";
	}
	
	/*function SetAge($a) //给age赋值的函数
	{
		if($a>10 && $a<50)
		{
			$this->age = $a;
		}
	}
	function GetAge() //取age的值
	{
		return $this->age;
	}*/
	
	function __set($name,$value) //对类里面的私有成员进行赋值的魔术方法
	{
		if($name == "age")
		{
			if($value>20 && $value<50)
			{
				$this->$name = $value;
			}
		}
		else
		{
			$this->$name = $value;
		}
	}
	
	function __get($name) //对类里面的私有成员进行取值的魔术方法
	{
		return $this->$name;
	}
}
$r = new Ren("男");
//$r->SetAge(40);
$r->Say();
echo $r->sex;
//$r->__set("name","张三");
//$r->name = "李四"; //执行该语句会自动调用__set方法
//$r->sex = "女";
//$r->age = 40;
//echo $r->GetAge();
var_dump($r);
//面向对象三大特性
//封装
//目的:让类更加安全,不让外界直接访问类里面的成员变量
//做法:1.把成员变量做成私有的
//2.做一个方法来实现变量取值或赋值,在方法里面加限制条件
//使用类里面提供的魔术方法也可以实现对私有成员的操作
//__set()特点:会自动执行,把赋值语句中的变量名作为第一个参数,把变量值作为第二个参数调用__set方法
//__get()特点:会自动执行,把取值语句中的变量名作为参数调用__get方法
//继承
//多态
原文:http://www.cnblogs.com/banyue5026/p/5483550.html