封装目的:让类更加的安全。
做法:不让外界直接访问类的成员
具体做法:
1.类里面的成员变量做为private
2.使用成员方法来间接访问成员变量
3.在该方法里面加限制条件
**php类里面不允许出现同名方法
<?php
class Ren { private $name; private $sex; private $age; //年龄必须在18-50之间 function __construct($v) { $this->sex = $v; } //魔术方法set function __set($n,$v) { if($n=="age") { if($v>=18 && $v<=50) { $this->$n = $v; } } else { $this->$n = $v; } } //魔术方法get function __get($n) { return $this->$n; } /*//设置age的值 function setage($a) { if($a>=18 && $a<=50) { $this->age = $a; } } //获取age的值 function getage() { return $this->age; }*/ function say() { echo "hello"; } //析构方法 function __destruct() { echo "这是一个析构方法"; } function __tostring() { return "这个类是人类"; } } $r = new Ren("男"); //$r->setage(20); //echo $r->getage(); $r->say(); //$r->age = 30; //echo $r->age; //$r->__get("age"); //$r->__set("age",20); var_dump($r);
?>
函数重载
在类里面写多个同名方法来实现不同功能
<?php
public string Show() { return "显示"; } public string Show(string a) { return a+"显示"; } public string Show(string a,string b) { return a+b+"显示"; } public string Show(int b) { return b+"数字"; }
?>
1.函数名必须相同
2.参数个数不同或参数类型不同
例子:求两个圆之间的阴影面积
<?php
$maxr = 20; $minr = 10; $mj = 3.14*$maxr*$maxr - 3.14*$minr*$minr; class Yuan { //代表半径 public $r; function __construct($n) { $this->r = $n; } //求面积的方法 function MJ() { return 3.14*$this->r*$this->r; } } $r1 = new Yuan(20); $r2 = new Yuan(10); $mianji = $r1->MJ()-$r2->MJ();
?>
例子:计算器
<?php
$a = 10; $b = 5; $jia = $a+$b; $jian = $a-$b; $cheng = $a*$b; $chu = $a/$b; class jisuan { public $a; public $b; function __construct($n,$m) { $this->a = $n; $this->b = $m; } function jia() { return $this->a+$this->b; } function jian() { return $this->a-$this->b; } function cheng() { return $this->a*$this->b; } function chu() { return $this->a/$this->b; } function quyu() { return $this->a%$this->b; } } $j = new jisuan(10,5); $j->quyu();
?>