- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
php面向对象编程-三大特征
php面向对象编程- 三大特征
封装
首先先介绍一个抽象的概念
抽象:
我们在前面去定义一个类时候,实际上就是把一类事物的共有的属性和行为提取出 来形成一个物理模型(模板)。这种研究问题的方法称为抽象。
那么什么是封装呢?
封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部 分只有通过被授权的操作(成员方法),才能对数据进行操作。
上边概念中我标蓝的部分中提到了封装时的数据保护和方法的授权,因此,在彻底了解 封装之前先说一下访问控制修饰符。
public 表示全局,类内部、外部和子类都可以访问;
protected 表示受保护的,只有本类或子类可以访问;
private 表示私有的,只有本类内部可以使用;
php中对象的成员变量的访问属性不能是默认的
比如: class Person{ $name=‘abc’; } $p1=new Person();是错误的!!
例子:
class Person{
public $name;
public $age;
private $salary;
public function Person($name,$age,$salary){
$this-name=$name;
$this-age=$age;
$this-salary=$salary;
}
public function getSalary(){
return $this-salary;
}
}
$p1=new Person(某某,10000);
echo 工资=.$p1-getSalary();
上面例子当中 $salary就是一个私有的属性不能在类的外部访问。这样就起到了一些数据的保护和通过一些授权的方法去访问这个数据,也就体现出了封装的含义。
此外访问private和protected这些属性的时候还有一个办法,这是php自带的一对魔术函数。
用一对__set和__get方法就可以处理所有的private 和 protected属性。
下边我举一个例子来说明他的用法,顺便解释一下这个函数的含义。
class Myfun{
protected $name;
private $age;
//当这个对象试图去修改一个不存在的属性的时候自动调用第一个参数代表要修改的属性的名称,第二个参数代表要修改的值。(因为private和protected在类的外部是不让访问的所以在类外部访问的时候会认为该属性不存在所以会调用这个函数)
function __set($pro_name,$pro_value){
$this-$pro_name = $pro_value;
}
//当这个对象试图去访问一个不存在的对象的时候会自动调用
function __get($pro_name){
if(isset($pro_name)){
return $this-$pro_name;
}else{
return null;
}
}
}
$m = new Myfun();
$m-name = 张三;
echo 你的名字:.$m-name;
$m-age=89;
echo 你的年龄是.$m-age;
这个方法在实际开发中不推荐使用,可以自己写一个类似这样的方法去自己控制。
class Test{
private $name;
public function getName(){ //这里可以增加一些自己的判断什么的,控制比较方便
return $this-name;
}
public function setName($name){ //这里可以增加一些自己的判断什么的,控制比较方便
$this-name = $name;
}
}
$t = new Test();
$t-setName(张三);
echo $t-getName();
上边的例子当中没有体现出成员方法的访问修饰符,在下边继承中说道,因为成员方法的访问修饰需要在子类中才能看到效果。
补充知识
文档评论(0)