php学习笔记 php中面向对象三大特性之一[封装性]的应用

前端之家收集整理的这篇文章主要介绍了php学习笔记 php中面向对象三大特性之一[封装性]的应用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

<div class="codetitle"><a style="CURSOR: pointer" data="26621" class="copybut" id="copybut26621" onclick="doCopy('code26621')"> 代码如下:

<div class="codebody" id="code26621"> @H_404_2@<?PHP @H_4042@/* @H4042@* 封装性:面向对象三大特性之一 @H4042@* @H404_2@ 1.就是把对象的成员(属性,方法)结合成一个独立的相同单位,并尽可能隐藏对象的内部细节 @H_404_2@ 访问权限修饰符 public protected private @H_4042@* private:私有的,用这个关键字修饰的成员,只能在对象内部访问(只有用$this访问) @H4042@* @H404_2@ 属性可以封装: @H_404_2@ 只要一个变量,需要在多个方法使用,就将这个变量声明为成员属性,可以直接在这个对象中的所有方法中使用 @H_4042@* @H404_2@ 成员属性,相当于这个对象中的全局变量 @H_404_2@ @H_404_2@ 成员属性都会在方法中使用,成员属性值的变化其实就是在改变方法的执行行为,也就是改变了对象的功能 @H_404_2@ @H_404_2@ 成员属性的值如果不正常,方法执行的功能叶就不正常 @H_404_2@ @H_4042@* 作用:不需要在对象外部改变或读取它的值 @H4042@* 1.封装 @H404_2@ 再提供一个公有的方法(经过方法对对象成员属性进行赋值和取值就可以控制) @H_404_2@ @H_4042@* @H404_2@ 方法也可以封装 @H_404_2@ @H_4042@* 作用: @H4042@* 1.使用private修饰使其只能在内部使用 @H4042@* @H404_2@ 2.一个类中有100个方法,封装了95个(为另外5个服务的方法),只有5个方法可以使用 @H_404_2@ @H_404_2@ 100个成员属性,都让取值,不可以改值;或者只可改值,不可获取值//此种情况下使用以下方法比较方便 @H_404_2@ 和封装有关的魔术方法: @H_4042@* @H404_2@ __set();//是直接设置[私有的]成员属性值时,自动调用方法 @H_404_2@ get();//是直接获取[私有的]成员属性值时,自动调用方法 @H_404_2@* isset();//是直接使用isset()查看对象中私有属性是否存在时,自动调用这个方法 @H_404_2@ __unset();//是直接使用unset()删除对象中私有属性时,自动调用方法 @H_404_2@ @H_4042@* @H4042@* @H4042@* @H4042@* @H4042@* @H4042@* @H4042@*/ @H4042@class Person{ @H404_2@//x封装成员属性,不需要在对象外部改变 @H_4042@private $name; @H4042@private $age; @H4042@private $sex; @H404_2@private unset($proName){ @H_4042@unset($this->$proName); @H4042@} @H404_2@//是直接查看对象中私有属性是否存在时,自动调用这个方法 @H_404_2@//isset($proName)的使用,$proName代表属性名 @H_404_2@private function isset($proName){ @H_4042@return isset($this->$proName);//isset()返回是否存在 @H4042@} @H404_2@function _construct($name,$age,$sex){ @H4042@$this->name=$name; @H4042@$this->age=$age; @H4042@$this->sex=$sex; @H4042@} @H404_2@//当获取私有的成员属性时,自动调用方法 @H_404_2@private function get($proName) @H_4042@{ @H404_2@//控制所获取的值 @H_4042@if($proName=="age"){ @H4042@if($this-age>40) @H4042@return $this->age-10; @H4042@} @H4042@return $this->$proName; @H4042@} @H404_2@//当设置私有的成员属性时,自动调用方法 @H_404_2@private function set($proName,$proValue){ @H_404_2@//$proName表示成员属性名,$proValue表示成员属性值 @H_4042@//控制设置范围 @H4042@if($proName=="age"){ @H4042@if($proValue > 100 || $proValue<0) @H4042@return; @H4042@} @H4042@$this->$proName=$proValue; @H4042@} @H404_2@//提供公有方法来设置成员属性的值 @H_4042@function setAge($age){ @H404_2@//控制年龄范围,增加安全性 @H_4042@if($age > 100 || $age < 0 ) @H4042@return; @H4042@$this->age=$age; @H4042@} @H404_2@//提供公有方法获取成员属性的值 @H_4042@function getAge(){ @H404_2@//控制获取年龄的范围 @H_4042@if($this->age < 30) @H4042@return $this->age; @H4042@else if($this->age<40) @H4042@return $this->age-5; @H4042@else if($this->age<50) @H4042@return $this->age; @H4042@else @H4042@return $this->age-15; @H404_2@提供公有方法来 } @H_4042@function say(){ @H4042@echo "我的名字:{$this->name},我的年龄:{$this->age},我的姓别:{$this->sex}
"; @H
404_2@//访问封装过的 run()方法 @H_4042@$this-run(); @H4042@} @H4042@private function run(){ @H4042@echo '111111111111
' @H
4042@} @H4042@function eat(){ @H4042@} @H404_2@//析构方法 @H_404_2@function _destruct(){ @H4042@} @H4042@} @H4042@$p1=new Person("zhangsan",25,"男"); @H4042@$p2=new Person; @H4042@$p3=new Person; @H404_2@//$p1->age=-50;//因为年龄在外部随意访问,所以成员属性药封装,才有安全性。 @H_404_2@$p1->setAge(30);//通过方法来设置成员属性德值 @H_404_2@$p1->getAge();//通过方法获取成员属性德值 @H_404_2@//通过添加家魔术方法
set($proName,$proValue) __get($proName),就可以直接调用成员属性了 @H_404_2@$p1->say();//可以调用 @H_404_2@$p1->run();//私有的方法不能直接调用 @H_404_2@//删除$p1里面的name @H_4042@unset($p1->name); @H4042@//判断name是否存在 @H4042@if(isset($p1->name)){ @H4042@echo "存在
"; @H
4042@}else{ @H4042@echo "没有这个成员
"; @H
4042@} @H4042@?> @H4042@
@H4042@作者:代号极光 @H404_2@出处:http://zizhuyuan.cnblogs.com

猜你在找的PHP相关文章