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 相关文章推荐
Smarty+QUICKFORM小小演示
Feb 25 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
Jun 09 PHP
php获得用户ip地址的比较不错的方法
Feb 08 PHP
PHP5各个版本的新功能和新特性总结
Mar 16 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
Feb 10 PHP
php编写的抽奖程序中奖概率算法
May 14 PHP
再推荐十款免费的php开发工具
Nov 09 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
Dec 12 PHP
php利用ob_start()清除输出和选择性输出的方法
Jan 18 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 PHP
PHP如何将图片文件上传到另外一台服务器上
Aug 26 PHP
php获取是星期几的的一些常用姿势
Dec 15 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
十天学会php之第九天
2006/10/09 PHP
新闻分类录入、显示系统
2006/10/09 PHP
FleaPHP的安全设置方法
2008/09/15 PHP
php数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
浅析51个PHP处理字符串的函数
2013/08/02 PHP
PHP类继承 extends使用介绍
2014/01/14 PHP
学习php设计模式 php实现访问者模式(Visitor)
2015/12/07 PHP
最新最全PHP生成制作验证码代码详解(推荐)
2016/06/12 PHP
php连接微软MSSQL(sql server)完全攻略
2016/11/27 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
2020/04/07 PHP
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
JavaScript模板引擎用法实例
2015/07/10 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
2016/08/24 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
2017/01/19 Javascript
详解Vue SPA项目优化小记
2018/07/03 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
Flask框架Flask-Login用法分析
2018/07/23 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
对python函数签名的方法详解
2019/01/22 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
2020/02/20 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
Python json解析库jsonpath原理及使用示例
2020/11/25 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
详解CSS3选择器:nth-child和:nth-of-type之间的差异
2017/09/18 HTML / CSS
欧洲领先的火车票和大巴票预订平台:Trainline
2018/12/26 全球购物
上班玩游戏检讨书
2014/02/07 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android
vue实现简易音乐播放器
2022/08/14 Vue.js