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