http://www.cnblogs.com/zizhuyuan/archive/2011/06/13/2079905.html

/** 封装性:面向对象三大特性之一** 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;elsereturn $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>";
}

oop三大特性--封装性相关推荐

  1. C#forUnity快速入门(连载5)-C#OOP编程之封装性

     C# for Unity 编程语言快速入门教程(连载5)---C#OOP编程之封装性  C#的OOP即面向对象开发三大特性: 封装.继承.多态,是非常核心的OOP开发思想.现就这部分总结部分知识点如 ...

  2. 类的 三大特性 封装,继承,多态 overload与override的区别

    OOP三大特性:封装,继承,多态 封装的目的:为了让类更安全 封装的做法: 1.类里面的成员变量做为private 2.使用成员方法来间接访问成员变量 3.在该方法里面加限制条件 php类里面不允许出 ...

  3. java 三大特性理解_java 三大特性--封装、继承和多态理解

    java 三大特性--封装.继承和多态理解 封装 /** * 所谓封装,就是将对象具有的成员变量和成员函数包装和隐藏起来,让外界无法直接使用, * 被封装的成员只能通过某些特定的方式才能访问. * 实 ...

  4. 到底什么是面向对象,面试中怎么回答。面向过程和面向对象的区别是什么。java跨平台特性以及java和C++的区别。面向对象的三大特性——封装、继承和多态。面向对象的高拓展性以及低耦合度怎么体现?

    Java语言具有的特点:面向对象.跨平台.多线程以及网络编程 1. 和C++的区别 1.1 Java隐蔽了C++的指针,避免指针直接操作,程序更加安全. 1.2 Java类继承只能单继承,避免了C++ ...

  5. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

  6. Java——OOP三大特性之封装性(Encapsulation)通俗详细

    面向对象(Object Oriented Programming)三大特性 1.封装(Encapsulation) 2.继承(Inheritance) 3.多态(Polymorphism) 定义 En ...

  7. 【总结记录】面向对象设计OOP三大特性(封装、继承、多态)、七大基本原则的理解(结合代码、现实实例理解)

    文章目录 一. 三大特征的理解 (1)封装 (2)继承 (3)多态 (4)面向对象.面向过程的对比 二. 七大基本原则的理解 (1)单一职责原则 (2)开放封闭原则(OOP 核心) (3)里氏替换原则 ...

  8. Swift学习 OOP三大特性:继承、多态、封装

    先看个例子  从上面的例子可以总结那么一句话:"学生是人".也就是Student类继承People类.简而言之,学生是人,这句话是说得通的,但是"人是学生"这句 ...

  9. Python OOP:面向对象三大特性(封装、继承、多态)、类属性和实例属性、类方法@classmethod、静态方法@staticmethod、函数和类callable、__call__

    一.面向对象三大特性 二.多态 定义:多态是⼀种使⽤对象的⽅式,⼦类重写⽗类⽅法,调⽤不同⼦类对象的相同⽗类⽅法,可以产⽣不同的执⾏结果. 一个父类,可以继承给多个子类,每个不同的子类可以创建多个对象 ...

最新文章

  1. python自动测试g_使用Python进行自动化测试
  2. 打开SQL Developer时,提示缺少快捷方式
  3. 关于xilinx fir use reloadable coefficient的用法
  4. django中序列化器字段参数、关联字段
  5. 2022版全球及中国应急装备市场格局分析与投资策略建议报告
  6. 手机抓包app_Python爬取网站上面的数据很简单,但是如何爬取APP上面的数据呢
  7. ajax请求后台表格数据,商品后台表格数据的展现方式
  8. 关于优酷开发SDK之setOnSeekCompleteListener
  9. JSONObject和JSONArray的关系
  10. tomcat如何查找请求资源的?
  11. 论文学习6-(M2DNE)Temporal Network Embedding with Micro- and Macro-dynamics
  12. java中setDocument_Java ActionItem.setDocumentId方法代码示例
  13. 一次httpserver优化的经验和教训(silverlight游戏 - 金庸群侠传X0.5上线记)
  14. bzoj 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二(RMQ)
  15. 【书单】NLP秘笈,从入门到进阶
  16. Python+Selenium练习篇之4-利用link text定位元素
  17. VS2022编译项目出现““csc.exe”已退出,代码为 -1073741819”的错误解决办法
  18. 3分钟搞懂什么是WPF。
  19. 函数的基本用法c语言,C语言(函数基本用法).ppt
  20. Emulex光纤卡lpfc配置文件的修改

热门文章

  1. 零代码积木编程案例分享
  2. magic winmail邮件服务器,使用Magic Winmail Server轻松架设邮件服务器(一)-网管专栏,邮件服务...
  3. C2977 “boost::type_of::encode_type”: 模板 参数太多
  4. base64编码转码
  5. bootstrap之data-toggle,data-dismiss,data-target用法
  6. 黑群辉安装php,黑群晖从装机到使用全过程 篇五:群晖安装VirtualBox虚拟机
  7. 图片头顶距离顶部百分比怎么修改_ps如何修改图片文字 ps怎么修改文字
  8. 【计算机研究与发展】一种基于区块链的泛用型数据隐私保护的安全多方计算协议——CCF A
  9. 【正点原子MP157连载】 第六章 TF-A 使用-摘自【正点原子】【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
  10. java获取每周的周一到周日时间节点