php面向对象特性(一)
OOP封装
面向对象的三个主要特性是封装、继承、多态
OOP的封装
隐藏对象的字段和实现细节,仅对外公开接口,控制在程序中字段的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。 字段的作用域: 1. public 公共的 (类外可以访问的) 2. private 私有的 (类内可以访问) 3. protected 受保护的(类内和子类可以访问,类外不可以访问) 什么是类内,就是创建类的花括号内的范围叫做类内,其他地方叫做类外。 创建使用了私有字段,这样外部就无法访问了
示例
class Computer{ // 类的字段(成员) //private 是私有化,即对字段进行封装的操作,类外无法访问,取值和赋值都不能操作 private $_name = '联想'; private $_mode = 'I7'; } $computer1 = new Computer(); //此时无法访问 echo $computer1->_name; #通过公共方法作为入口,访问私有字段,而必须使用$this关键字。 class Computer{ //类的字段(成员) private $_name="联想"; //这时采用一个对外的公共方法来访问私有字段 //因为私有字段只能在类内访问,而对外的公共方法是类内的 //更而公共方法又是公共的,所以类外又可访问。 public function _run(){ //字段在类内调用的时候,必须是类->字段,而$_name只是一个普通变量而已。 //字段在类外调用的方法是对象->字段,而类内就必须使用Computer->_name //但在本类中,可以用一个关键字来代替Computer,那就是$this echo $this->_name; } } $computer1 = new Computer(); echo $computer1->_run();
对私有字段的赋值和取值
可以设计两个公共方法,一个方法是setName(),用于赋值,一个方法是getName(),用于取值。
class Computer{ // 类的字段(成员)private $_name = "联想"; // 构造方法public function __construct(){echo "<meta charset=utf8>";} // 赋值 public function setName($name){ //这里的$_name 只是一个变量而已,参数而已 //this->_name才是类的字段$this->_name=$name; } // 取值public function getName(){return $this->_name;} } $computer1 = new Computer(); $computer1->setName("dell"); echo $computer1->getName();
拦截器
如果有十个字段那么就必须要有二十个方法才能够赋值和取值,php内置了两个方法(拦截器)专门用于取值和赋值:__set(),__get()
class Computer{private $_name ;private $_cpu;private $_model;public function __construct(){echo "<meta charset=utf8>";}//当类外的对象直接调用私有字段时,会跟着去检查拦截器,//如果直接对$_name进行赋值,那么 __set()方法就会拦截住,就不会报错了//采用拦截器赋值和取值//赋值public function __set($name, $value){//如果$name = '_name',如果$value="联想"// $this->_name='联想'//如果$name='_cpu',如果$value="4核"//$this->_cpu ='4核'//如果$name='_model',如果$value='i7'//$this->_model='i7'$this->$name = $value;}//取值public function __get($name){//如果$key = '_name' 那么$this->_name//如果$key = '_cpu' 那么$this->_cpu//如果$key = '_model' 那么$this->_modelreturn $this->$name;} } $computer1 = new Computer(); $computer1->_name = "联想"; $computer1->_model = "i7"; $computer1->_cpu = "4核"; echo $computer1->_name; echo $computer1->_model; echo $computer1->_cpu;
提示:将成员方法私有化,也可以在类外调用,这是为什么呢?
转载于:https://www.cnblogs.com/anyux/p/8227945.html
php面向对象特性(一)相关推荐
- javascript 的面向对象特性参考
最近在看用javascript+css实现rich client.javascript 也是一个蛮有意思的语言.特别是其面向对象的实现和其他"标准"的OO launguage有很大 ...
- JavaScript的面向对象特性
JavaScript的面向对象特性 JavaScript是基于对象和事件驱动并具有安全性能的脚本:JavaScript虽然不是面向对象的编程语言但具有很多面向对象的特性. 1.面向对象开发 a) ...
- Javascript面向对象特性
JavaScript面向对象的支持 ~~~~~~~~~~~~~~~~~~ 很少有人对JavaScript的面向对象特性进行系统的分析.我希望接下来的文字让你了解到这 个语言最少为人知的一面. 1. J ...
- Python基础复习09_面向对象特性
面向对象特性 1. 继承 Outline ·继承概念 ·单继承/多继承 ·子类重写/调用父类的同名属性和方法 ·多层继承 ·super() ·私有属性和私有方法 1.1 继承的概念 继承指的是多个类之 ...
- Java什么是面向对象和面向对象特性
找工作,面试官都会问起什么是面向对象.对于这种问题也没有唯一的说法吧.自己感觉 要结合实际来说吧.以下通过面向对象的概念和面向对象特性来理解什么是面向对象 面向对象其实是现实世界模型的自然延伸.现实世 ...
- 【Java基础】面向对象特性
面向对象的特征 面向对象的主要特征包括:抽象,继承,封装,多态 1. 抽象:忽略主题中与当前目标无关的方面,值注意与目标有关的方面(抓住主要矛盾或者主要特征),包括数据抽象和过程抽象 2. 继承:用于 ...
- 学习笔记2——对象初始化和面向对象特性
1.java类的初始化顺序: (1).在一个类中,初始化顺序由变量在类中的声明定义顺序决定,成员变量(非set方法和构造方法的初始化)的初始化发生在方法调用之前,包括构造方法. (2).静态变量在整个 ...
- JS面向对象特性和值类型与复合类型
JS面向对象之特性已经值类型与复合类型 一些属性 空对象 空对象也是对象, 只是有存变量的变量名, 没有对象属性 var o ={}; 参数传递 值类型: 函数内外两个变量, 两个数据, 都不相同 引 ...
- java面向对象特性_java面向对象编程三大特性
一说到java面向对象编程就想到面向对象的三大特性,封装,继承和多态,下面我们来具体分析以下这三大特性在编程中是如何具体体现的. 封装 将类的属性和具体实现细节隐藏,只提供相关的接口和方法来对隐藏信息 ...
- C++面向对象特性之多态
一种对象为了接口重用而呈现的多重形态 静态多态有模板重载,根据不同的参数调用函数体不同,这是在编译是就确定的 动态多态有父子类中的虚函数,父类的指针或者引用调用的虚函数如果进行了重写则会调用子类的虚函 ...
最新文章
- DCIC 2021数据挖掘新赛题开放!
- 银行家算法回顾[JAVA实现]
- 找找Amazon的A9算法更新和变化的蛛丝马迹!
- Linux Centos7安装hadoop3.x安装流程(跪舔文)
- 参数binlog_rows_query_log_events和binlog_row_image 与用 binlog恢复数据
- uboot源码——环境变量
- 重庆“扫黄打非”部门打掉一网络传黄团伙,查获淫秽视频11万余部
- JSK-136 公式计算【入门】
- Visual Studio Code设置自定义背景图片
- ArcGIS中shp文件的裁剪
- swot分析法案例_项目型销售案例剖析的五大步骤
- Linux Ubuntu16.04 Python3.5.2 Cuda10.1 TITAN XP安装fastai v1
- 微信小程序密码输入框
- 细数饿了么开源的前端项目及实践
- plc输出类型有哪些?
- 你要的能做出炫酷图表的网站来啦
- Mybatis入门学习七:日志
- 【博客635】tcpdump原理与网卡混杂模式
- 2016百度之星 - 测试赛 1002 列变位法解密 (模拟)
- jsp 模板引擎。无需 tomcat,只需一个 jar 包直接根据 jsp 源文件渲染得到 html 页面