博学而笃志 切问而近思 仁在其中
详情
php面向对象编程的封装性
作者:Aliot     发布时间:2017-07-02     评论:0     阅读:0

php面向对象编程的封装性

时间:2016-10-15 本站 guaitu

封装的概念

封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作。

例:在人这个类中,人的年龄和工资是隐私的

  class Person{
public $name;
private $age;
private $salary;
function __construct($name,$age,$salary){
$this->name=$name;
$this->age=$name;
$this->salary=$salary;
}
}
//创建一个人
$p1=new Person("张三",30,1000);
//访问张三的工资
//echo $p1->salary; //会报错,不能访问private中的属性
echo $p1->name;
?>

封装的访问修饰符

php提供三种访问控制修饰符号来控制方法和变量(属性)的访问权限

public 表示全局,类的外部、内部和子类都可以访问。

protected 表示受保护的,只有本类或子类可以访问;

private 表示私有的,只有本类内部可以使用;

这三个修饰符号可以修饰变量和方法。

1) 如果一个方法没有访问修饰符,默认是public的。

2)属性(变量)必须指定访问修饰符。

3)方法之间可以相互调用,但需要$->this引用。

如下表:

  public protected private
全局 X X
继承类 X
本类

例:

  class Person{
public $name;
protected $age;
private $salary;
function __construct($name,$age,$salary){
$this->name=$name;
$this->age=$name;
$this->salary=$salary;
}
function showInfo(){
//在本类中可以使用public,protected和private类型的值
echo $this->name."||".$this->age."||".$this->salary."
";
}
}
//创建一个人
$p1=new Person("张三",30,1000);
//访问张三的工资
//echo $p1->salary; //会报错,不能访问private中的属性
echo $p1->name."
";
$p1->showInfo();
//echo $p1->age;//报错,因为$age是protected的,类外不能访问
//echo $p1->salary; //报错,因为$salary是private的,类外不能访问
?>

如何访问protected和private修饰的成员变量?通常是在类中通过public的函数去访问这些变量。也可以使用php提供的方法

__set();和__get();这两种方法也被称为魔术方法。注意:目前已经不推荐使用魔术方法了

__set()对protected或private属性进行赋值操作,例:

__set($name,$value);

__get()获取protected或private属性的值,例:

__get($name);

例:

 class A{
private $n1;
private $n2;
private $n3;
//使用__set方法来管理所有私有属性
public function __set($pro_name,$pro_val){
$this->pro_name=$pro_val;
}
//使用__get方法来管理所有私有属性的值
public function __get($pro_name){
if(isset($pro_name)){
return $this->pro_name;
}else{
return null;
}
}
}
$a1=new A();
$a1->n1="www.bianceng.cn";
echo $a1->n1; //输出www.bianceng.cn
?>

通常是在类中通过public的函数去访问protected和private修饰的成员变量

例:

  class Person{
public $name;
protected $age;
private $salary;
function __construct($name,$age,$salary){
$this->name=$name;
$this->age=$name;
$this->salary=$salary;
}
function showInfo(){
//在本类中可以使用public,protected和private类型的值
echo $this->name."||".$this->age."||".$this->salary."
";
}
//我们可以通过public的函数来访问protected或private的变量
function getSalary($user,$pass){
if($user=="www.bianceng.cn" && $pass==123){
return $this->salary;
}else{
echo "你没有查看工资的权限";
}
}
}
//创建一个人
$p1=new Person("张三",30,1000);
//访问张三的工资
//echo $p1->salary; //会报错,不能访问private中的属性
echo $p1->name."
";
$p1->showInfo();
//echo $p1->age;//报错,因为$age是protected的,类外不能访问
//echo $p1->salary; //报错,因为$salary是private的,类外不能访问
echo $p1->getSalary("www.bianceng.cn",123);
?>

例:修改和查看上例中被protected的age

  class Person{
public $name;
protected $age;
private $salary;
function __construct($name,$age,$salary){
$this->name=$name;
$this->age=$name;
$this->salary=$salary;
}
function showInfo(){
//在本类中可以使用public,protected和private类型的值
echo $this->name."||".$this->age."||".$this->salary."
";
}
//我们可以通过public的方法来访问protected或private的变量
function getSalary($user,$pass){
if($user=="www.bianceng.cn" && $pass==123){
return $this->salary;
}else{
echo "你没有查看工资的权限";
}
}
//修改年龄
public function setAge($age){
if($age>=1 && $age<=120){
$this->age=$age;
}else{
echo "
年龄范围不对!
";
}
}
//查看年龄
public function getAge(){
return $this->age;
}
}
//创建一个人
$p1=new Person("张三",30,1000);
//访问张三的工资
//echo $p1->salary; //会报错,不能访问private中的属性
echo $p1->name."
";
$p1->showInfo();
//echo $p1->age;//报错,因为$age是protected的,类外不能访问
//echo $p1->salary; //报错,因为$salary是private的,类外不能访问
echo $p1->getSalary("www.bianceng.cn",1203);
//修改年龄
$p1->setAge(75);
echo "
".$p1->getAge();
?>

URL:http://www.bianceng.cn/webkf/PHP/201610/50461.htm


相关文章
loading......
最新动态
所有评论

loading......

网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册