php面向对象基础概念(封装)
封装性是面象对象编程中的三大特性之一,封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义:
1. 把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。
2. 信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界〔或者说形成一道屏障〕,只保留有限的对外接口使之与外部发生联系。
封装的原则在软件上的反映是:要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的"交叉感染",使软件错误能够局部化,大大减少查错和排错的难度。
用个实例来说明吧, 假如某个人的对象中有年龄和工资等属性,像这样个人隐私的属性是不想让其它人随意就能获得到的,如果你不使用封装,那么别人想知道就能得到,但是如果你封装上之后别人就没有办法获得封装的属性, 除非你自己把它说出去,否则别人没有办法得到。
在比如说,个人电脑都有一个密码,不想让其它人随意的登陆,在你电脑里面拷贝和粘贴。还有就是像人这个对象, 身高和年龄的属性, 只能是自己来增涨,不可以让别人随意的赋值等等。
使用private这个关键字来对属性和方法进行封装:
原来的成员:
- <?php
- var $name; //声明人的姓名
- var $sex; //声明人的性别
- var $age; //声明人的年龄
- function run(){……}
改成封装的形式:
- <?php
- private $name; //把人的姓名使用private关键字进行封装
- private $sex; //把人的性别使用private关键字进行封装
- private $age; //把人的年龄使用private关键字进行封装
- private function run(){……} //把人的走路方法使用private关键字进行封装
没有加任何访问控制,默认的是public的,任何地方都可以访问。
- <?php
- //这个人可以说话的方法, 说出自己的私有属性,在这里也可以访问私有方法
- function say() {
- echo "我的名子叫:" . $this->name . " 性别:" . $this->sex . " 我的年龄是:" . $this->age;
- //在这里也可以访问私有方法
- //$this->run();
- }
因为成员方法say()是公有的, 所以我们在类的外部调用say()方法是可以的,改变上面的代码:
- <?php
- class Person
- {
- //下面是人的成员属性
- private $name; //人的名子,被private封装上了
- private $sex; //人的性别, 被private封装上了
- private $age; //人的年龄, 被private封装上了
- //定义一个构造方法参数为私有的属性姓名$name、性别$sex和年龄$age进行赋值
- function __construct($name, $sex, $age) {
- //通过构造方法传进来的$name给私有成员属性$this->name赋初使值
- $this->name = $name;
- //通过构造方法传进来的$sex给私有成员属性$this->sex赋初使值
- $this->sex = $sex;
- //通过构造方法传进来的$age给私有成员属性$this->age赋初使值
- $this->age = $age;
- }
- //这个人可以说话的方法, 说出自己的私有属性,在这里也可以访问私有方法
- function say() {
- echo "我的名子叫:" . $this->name . " 性别:" . $this->sex . " 我的年龄是:" . $this->age;
- }
- }
- //通过构造方法创建3个对象$p1、p2、$p3,分别传入三个不同的实参为姓名、性别和年龄
- $p1 = new Person("张三", "男", 20);
- $p2 = new Person("李四", "女", 30);
- $p3 = new Person("王五", "男", 40);
- //下面访问$p1对象中的说话方法
- $p1->say();
- //下面访问$p2对象中的说话方法
- $p2->say();
- //下面访问$p3对象中的说话方法
- $p3->say();
- ?>
输出结果:
- 我的名子叫:张三 性别:男 我的年龄是:20我的名子叫:李四 性别:女 我的年龄是:30我的名子叫:王五 性别:男 我的年龄是:40
php面向对象基础概念(封装)的更多相关文章
- Java第三次作业——面向对象基础(封装)
Java第三次作业--面向对象基础(封装) (一)学习总结 1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明. 封装性 封装性是面向对象的方法所应遵循的一个重要原则,它有两个含义: ...
- Python全栈--9 __import__ 反射和面向对象基础 self 封装 继承(多继承的顺序) 多态
一.反射 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删 ...
- C#面向对象 基础概念25个
1.静态成员和非静态成员的区别?2.const 和 static readonly 区别?3.extern 是什么意思?4.abstract 是什么意思?5.internal 修饰符起什么作用?6.s ...
- -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal
java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型 也就是 ...
- python开发面向对象基础:封装
一,封装 [封装] 隐藏对象的属性和实现细节,仅对外提供公共访问方式. [好处] 1. 将变化隔离: 2. 便于使用: 3. 提高复用性: 4. 提高安全性: [封装原则] 1. 将不需要对外提供的内 ...
- python基础-9__import__ 反射和面向对象基础 self 封装 继承(多继承顺序) 多态
一 反射 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删 ...
- Java第三次作业--面向对象基础(封装)
Deadline: 2017-4-6 23:00 一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握简单类的设计 掌握利用对象引用建立类与类之间的联系 掌握this关键字 掌握static关键 ...
- 087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点
087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点 本文知识点:封装的概念和特点 说明:因为时间紧张,本人写博客过程中只是对 ...
- python3 速查参考- python基础 8 -> 面向对象基础:类的创建与基础使用,类属性,property、类方法、静态方法、常用知识点概念(封装、继承等等见下一章)
基础概念 1.速查笔记: #-- 最普通的类 class C1(C2, C3): spam = 42 # 数据属性 def __init__(self, name): # 函数属性:构造函数 self ...
随机推荐
- 获取本地IP和mac等信息
1获取mac protected string getHostMacName() { string mac = ""; ManagementClass mc; mc = new M ...
- 基于java反射的javabean和map相互转换的工具类
话不多说,代码如下 package com.study; import java.lang.reflect.Field; import java.util.HashMap; import java.u ...
- 【C#/WPF】获取项目的根目录(Root Directory)
/// <summary> /// 获得项目的根路径 /// </summary> /// <returns></returns> public str ...
- http://blog.csdn.net/beitiandijun/article/details/41678251
http://blog.csdn.net/beitiandijun/article/details/41678251
- Android——对话框1(一般、选择、自定义、进度条)
xml <Button android:layout_width="match_parent" android:layout_height="wrap_conten ...
- js学习笔记16----父节点的操作
1.元素.parentNode : 只读属性,获取当前元素的父节点. 2.元素.offsetParent : 只读属性,获取离当前元素最近的一个有定位属性(position为relative或者abs ...
- MapReduce初探
转自 :http://blog.itpub.net/28912557/viewspace-1127423/ Map-Reduce处理过程(分析气象数据的map-reduce过程)1,调用标准的inpu ...
- LVS学习笔记及总结(思维导图版)
转自: http://www.07net01.com/2015/10/944377.html 下图是我在跟随马哥的脚步学习LVS过程中的学习笔记,以此为蓝本总结的,若有不足之处请谅解!
- foreach、count、explode(对无限级分类的语法注释-显示无限级效果)
foreach ($array as $key => $value) foreach仅能用于数组. 每次循环中,当前单元的键名也会在每次循环中被赋给变量$key. 当前单元的值被赋给$value ...
- 【面试】hibernate n+1问题
Hibernate中常会用到set,bag等集合表示1对多的关系, 在获取实体的时候就能根据关系将关联的对象或者对象集取出, 还可以设定cascade进行关联更新和删除.这不得部说hibernate的 ...