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


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

作者:代号极光
出处:http://zizhuyuan.cnblogs.com
PHP 相关文章推荐
PHP中常用数组处理方法实例分析
Aug 30 PHP
php date与gmdate的获取日期的区别
Feb 08 PHP
php URL验证正则表达式
Jul 19 PHP
php批量上传的实现代码
Jun 09 PHP
php调用mysql存储过程实例分析
Dec 29 PHP
php获取、检查类名、函数名、方法名的函数方法
Jun 25 PHP
Zend Framework上传文件重命名的实现方法
Nov 25 PHP
PHP验证终端类型是否为手机的简单实例
Feb 07 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
PHP fclose函数用法总结
Feb 15 PHP
tp5框架内使用tp3.2分页的方法分析
May 05 PHP
THINKPHP5分页数据对象处理过程解析
Oct 28 PHP
php学习笔记 面向对象的构造与析构方法
Jun 13 #PHP
php学习笔记 类的声明与对象实例化
Jun 13 #PHP
php学习笔记 PHP面向对象的程序设计
Jun 13 #PHP
php学习笔记 数组的常用函数
Jun 13 #PHP
PHP中的函数嵌套层数限制分析
Jun 13 #PHP
PHP5中新增stdClass 内部保留类
Jun 13 #PHP
php中使用Akismet防止垃圾评论的代码
Jun 10 #PHP
You might like
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
php chr() ord()中文截取乱码问题解决方法
2008/09/08 PHP
php cli 小技巧
2013/06/03 PHP
获取URL文件名后缀
2013/10/24 PHP
一个完整的php文件上传类实例讲解
2015/10/27 PHP
PHP下载文件的函数实例代码
2016/05/18 PHP
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
vue router仿天猫底部导航栏功能
2017/10/18 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
再谈Angular4 脏值检测(性能优化)
2018/04/23 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
2019/08/22 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
2019/09/16 Javascript
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
vue-form表单验证是否为空值的实例详解
2019/10/29 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
2020/06/07 Javascript
jQuery实现开关灯效果
2020/08/02 jQuery
Python学习教程之常用的内置函数大全
2017/07/14 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
Python reques接口测试框架实现代码
2020/07/28 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
美国在线宠物用品商店:Entirely Pets
2017/01/01 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
三严三实对照检查材料思想汇报
2014/09/28 职场文书
大二学生自我检讨书
2014/10/23 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
家庭贫困证明
2015/06/16 职场文书
公司财务管理制度
2015/08/04 职场文书
如何写一份成功的商业计划书
2019/06/25 职场文书