封装性是面象对象编程中的三大特性之一,封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义:

1. 把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。

2. 信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界〔或者说形成一道屏障〕,只保留有限的对外接口使之与外部发生联系。

封装的原则在软件上的反映是:要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的"交叉感染",使软件错误能够局部化,大大减少查错和排错的难度。

用个实例来说明吧, 假如某个人的对象中有年龄和工资等属性,像这样个人隐私的属性是不想让其它人随意就能获得到的,如果你不使用封装,那么别人想知道就能得到,但是如果你封装上之后别人就没有办法获得封装的属性, 除非你自己把它说出去,否则别人没有办法得到。

在比如说,个人电脑都有一个密码,不想让其它人随意的登陆,在你电脑里面拷贝和粘贴。还有就是像人这个对象, 身高和年龄的属性, 只能是自己来增涨,不可以让别人随意的赋值等等。

使用private这个关键字来对属性和方法进行封装:

原来的成员:

  1. <?php
  2. var $name; //声明人的姓名
  3. var $sex; //声明人的性别
  4. var $age; //声明人的年龄
  5. function run(){……}

改成封装的形式:

  1. <?php
  2. private $name; //把人的姓名使用private关键字进行封装
  3. private $sex; //把人的性别使用private关键字进行封装
  4. private $age; //把人的年龄使用private关键字进行封装
  5. private function run(){……} //把人的走路方法使用private关键字进行封装

没有加任何访问控制,默认的是public的,任何地方都可以访问

  1. <?php
  2. //这个人可以说话的方法, 说出自己的私有属性,在这里也可以访问私有方法
  3. function say() {
  4. echo "我的名子叫:" . $this->name . " 性别:" . $this->sex . " 我的年龄是:" . $this->age;
  5. //在这里也可以访问私有方法
  6. //$this->run();
  7. }

因为成员方法say()是公有的, 所以我们在类的外部调用say()方法是可以的,改变上面的代码:

  1. <?php
  2. class Person
  3. {
  4. //下面是人的成员属性
  5. private $name; //人的名子,被private封装上了
  6. private $sex; //人的性别, 被private封装上了
  7. private $age; //人的年龄, 被private封装上了
  8. //定义一个构造方法参数为私有的属性姓名$name、性别$sex和年龄$age进行赋值
  9. function __construct($name, $sex, $age) {
  10. //通过构造方法传进来的$name给私有成员属性$this->name赋初使值
  11. $this->name = $name;
  12. //通过构造方法传进来的$sex给私有成员属性$this->sex赋初使值
  13. $this->sex = $sex;
  14. //通过构造方法传进来的$age给私有成员属性$this->age赋初使值
  15. $this->age = $age;
  16. }
  17. //这个人可以说话的方法, 说出自己的私有属性,在这里也可以访问私有方法
  18. function say() {
  19. echo "我的名子叫:" . $this->name . " 性别:" . $this->sex . " 我的年龄是:" . $this->age;
  20. }
  21. }
  22. //通过构造方法创建3个对象$p1、p2、$p3,分别传入三个不同的实参为姓名、性别和年龄
  23. $p1 = new Person("张三", "男", 20);
  24. $p2 = new Person("李四", "女", 30);
  25. $p3 = new Person("王五", "男", 40);
  26. //下面访问$p1对象中的说话方法
  27. $p1->say();
  28. //下面访问$p2对象中的说话方法
  29. $p2->say();
  30. //下面访问$p3对象中的说话方法
  31. $p3->say();
  32. ?>

输出结果:

  1. 我的名子叫:张三 性别:男 我的年龄是:20我的名子叫:李四 性别:女 我的年龄是:30我的名子叫:王五 性别:男 我的年龄是:40
 

php面向对象基础概念(封装)的更多相关文章

  1. Java第三次作业——面向对象基础(封装)

    Java第三次作业--面向对象基础(封装) (一)学习总结 1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明. 封装性 封装性是面向对象的方法所应遵循的一个重要原则,它有两个含义: ...

  2. Python全栈--9 __import__ 反射和面向对象基础 self 封装 继承(多继承的顺序) 多态

    一.反射 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删 ...

  3. C#面向对象 基础概念25个

    1.静态成员和非静态成员的区别?2.const 和 static readonly 区别?3.extern 是什么意思?4.abstract 是什么意思?5.internal 修饰符起什么作用?6.s ...

  4. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  5. python开发面向对象基础:封装

    一,封装 [封装] 隐藏对象的属性和实现细节,仅对外提供公共访问方式. [好处] 1. 将变化隔离: 2. 便于使用: 3. 提高复用性: 4. 提高安全性: [封装原则] 1. 将不需要对外提供的内 ...

  6. python基础-9__import__ 反射和面向对象基础 self 封装 继承(多继承顺序) 多态

    一 反射 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删 ...

  7. Java第三次作业--面向对象基础(封装)

    Deadline: 2017-4-6 23:00 一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握简单类的设计 掌握利用对象引用建立类与类之间的联系 掌握this关键字 掌握static关键 ...

  8. 087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点

    087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点 本文知识点:封装的概念和特点 说明:因为时间紧张,本人写博客过程中只是对 ...

  9. python3 速查参考- python基础 8 -> 面向对象基础:类的创建与基础使用,类属性,property、类方法、静态方法、常用知识点概念(封装、继承等等见下一章)

    基础概念 1.速查笔记: #-- 最普通的类 class C1(C2, C3): spam = 42 # 数据属性 def __init__(self, name): # 函数属性:构造函数 self ...

随机推荐

  1. java的static块执行时机<转>

    一.误区:简单认为JAVA静态代码块在类被加载时就会自动执行.证错如下: class MyClass1 { static {//静态块 System.out.println("static  ...

  2. Oracle主表列表上显示从表字段拼成的字符串

    select t.*,t1.person_names from itil_duty_group t ,( select p.duty_group_id, WMSYS.WM_CONCAT(p.perso ...

  3. socket编程基础-字节序/IP/PORT转换/域名

    socket编程基础 网络IP操作函数 字符串的IP和32位的IP转换 #include <sys/socket.h> #inlcude <netinet/in.h> #inc ...

  4. mongodb查询之从多种分类中获取各分类最新一条记录

    mongodb查询之从多种分类中获取各分类最新一条记录 2017年04月06日 13:02:47 monkey_four 阅读数:6707更多 个人分类: MongoDBJavaScript   文章 ...

  5. pick王菊?作为“菊外人”的程序员能做点什么?

    转载:https://mp.weixin.qq.com/s/s1cb9Ij6ouTYYCZovLhXTA 最近,想必大家的朋友圈都被“王菊”占领了,打开朋友圈到处可以见到“pick王菊”.“陶渊明”. ...

  6. 最大似然估计 (MLE)与 最大后验概率(MAP)在机器学习中的应用

    最大似然估计 MLE 给定一堆数据,假如我们知道它是从某一种分布中随机取出来的,可是我们并不知道这个分布具体的参,即“模型已定,参数未知”. 例如,对于线性回归,我们假定样本是服从正态分布,但是不知道 ...

  7. e577. Enabling Antialiasing

    // See e575 The Quintessential Drawing Program public void paint(Graphics g) { // Retrieve the graph ...

  8. php -- 静态变量

    一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会.下次再调用这个函数的时候,该变量的值会保留下来. 静态的变量的基本用法 1. 在类中定义静态变量 [访问修饰符] static $ ...

  9. linux下简单好用的端口映射转发工具rinetd 转

    linux下简单好用的工具rinetd,实现端口映射/转发/重定向 官网地址http://www.boutell.com/rinetd 软件下载 wget http://www.boutell.com ...

  10. Why provision Bare Metal

    Here are a few use-cases for bare metal (physical server) provisioning in cloud; there are doubtless ...