php 访问控制和重载
一 php 类中定义的private/protected属性,类外部是无法访问的,但是 我们可以通过public方法来访问设置这些属性
如下
<?php
class test{
private $a = 1; public function get(){
return $this->a;
} public function set(){
$this->a = 2;
}
} $m = new test();
echo $m->get();
$m->set();
var_dump($m); ?>
我们可以通过公共的方法访问,设置private属性的值。
二 上面定义的公共方法调用时,必须显式的调用,给出方法名。但是对于可直接访问的属性,我们不需要使用这些方法,直接$m->属性即可。
这里面就存在不同访问控制的属性使用不同的方法 来访问/设置。那么有没有统一的操作接口,使得 我们无论访问类中的public/private/protected属性,都是一致的方法呢?
__set()/__get()方法提供了这种方便
__set()设置不存在的或者不可访问的属性时,自动调用。
__get()访问不存在或者不可访问的属性时,自动调用。
<?php
class test{
private $a = 1; public function __get($a){
if(isset($this->$a)){
return $this->$a;
}else{
return '不存在的属性';
} } public function __set($name,$value){
$this->$name = $value;
}
}
$m = new test();
echo $m->b;
$m->a=2;
$m->b=10;
var_dump($m);
?>
通过在类中实现__set()/__get(),实现了对属性访问的统一操作。
三 : php重载。php重载不同于 java重载,php重载 是指动态的创建类的属性 和方法。__get()/__set()方法就被归到了重载里。
个人觉得,php虽然支持重载,但我们最好不要这么做。首先,破坏了访问封装,其次,动态的创建的属性和方法,只是为当前实例添加了这些属性方法,类的其他实例并没有这些属性和方法。
纯属个人见解,欢迎批评指正
php 访问控制和重载的更多相关文章
- PHP工程师学习计划
从开始学习PHP到现在,只是大致的对PHP的一些基础的东西了解一下,从没有制定一个较为完整的学习计划,所以自己的编程水平一直都处在基本的入门阶段,所以结合自己的实际情况制定了一个感觉还算合理的学习计划 ...
- Unit04 - 继承的意义(下) 、 访问控制 、 static和final
Unit04 - 继承的意义(下) . 访问控制 . static和final 1.方法的重写(Override):重新写.覆盖 1)发生在父子类中,方法名称相同,参数列表相同,方法体不同 2 ...
- java的访问控制(包、访问修饰符、修饰符)
一. java的类包 编写好一个源程序后,首先要执行javac命令进行编译源文件,并生成与源文件同名后缀为“.class”的字节码文件(类文件),该类文件与源文件默认在同一个目录中.该类文件是 ...
- Swift 3中新的访问控制关键字fileprivate和open
在Swift 3中除去原有的3个访问控制关键字private,public,internal,又添加了2个关键字fileprivate和open 它们可以看成是对private和public的进一步细 ...
- Apache shiro集群实现 (四)shiro授权(Authentication)--访问控制
Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...
- Java——重载和重写
前言 在程序设计中经常会遇到对对方法的重载或者重写,下面将介绍重载和重写. 重载(Overloade) 重载出现的原因 任何程序设计语言都具备的一项重要特性就是对名字的运用.当创建一个对象时,就给对象 ...
- Nginx详解九:Nginx基础篇之Nginx的访问控制
基于IP的访问控制:http_access_module 不允许指定网段的用户访问:配置语法:deny address | CIDR | unix: | all;默认状态:-配置方法:http.ser ...
- php面向对象 封装继承多态 接口、重载、抽象类、最终类总结
1.面向对象 封装继承多态 接口.重载.抽象类.最终类 面向对象 封装继承多态 首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...
- C++ 继承、函数重载
题外话1:浪费了两天,可耻! 题外话2:你这个年纪,做得好是理所当然,做不好是罪孽深重!!! --- 深以为然. 题外话3:从开始看C++ Primer 到现在,整整24天了,没想到基础方面耗费这么久 ...
随机推荐
- NPOI读取Excel官方demo
关键代码: 读: HSSFWorkbook hssfworkbook; void InitializeWorkbook(string path) { //read the template via F ...
- WinForm 多语言处理
多语言处理工具我使用的是 SailingEase .NET Resources Tool ,好处是导出一个Excel,把具体翻译工作交给专业的人来做,翻译ok后再导入,缺点就是后续更改麻烦,添加一个 ...
- ASP.NET 关于GridView 表格重复列合并
这几天做一个项目有用到表格显示数据的地方,客户要求重复的数据列需要合并,就总结了一下GridView 和 Repeater 关于重复数据合并的方法. 效果图如下 : GridView : 前台代码 : ...
- idea 版本升级至最新版
前言:当前最新版为官网上的2018.2.3版本 一.下载最新版 官网地址:http://www.jetbrains.com/idea/download/#section=windows 百度网盘地址: ...
- 关于android R.layout 中找不到已存在的布局文件问题的解决
今天遇到一个很奇怪的问题,打R.layout.,居然不会提示已经写好的布局文件,自己把xml文件名打下去后,居然提示错误. 开始以为是R文件中没有自动生成关于布局文件对应的整型,看了R文件,其实是有生 ...
- 在windows上搭建redis集群(redis-cluster)
一 所需软件:Redis.Ruby语言运行环境.Redis的Ruby驱动redis-xxxx.gem.创建Redis集群的工具redis-trib.rb 二 安装配置redis redis下载地址 ...
- css对ie的兼容性问题处理(一):
1.在制作sidebar时对li里面的元素进行浮动,li在ie6/7下会出现4px的间间隙: 解决方法:在li下加上vertical-align属性,值可为top.bottom.middle: 扩展: ...
- CSS属性display的浅略探讨
display 的属性值有:none|inline|block|inline-block|list-item|run-in|table|inline-table|table-row-group|tab ...
- 【Android】RxJava的使用(四)线程控制 —— Scheduler
并没有关系的图 前言 经过前几篇的介绍,对RxJava对模式有了一定的理解:由Observable发起事件,经过中间的处理后由Observer消费.(对RxJava还不了解的可以出门左拐)之前的代码中 ...
- 报表在IBM AIX系统下resin部署
报表是用java开发的,具有良好的跨平台性.不仅可以应用在windows.linux.操作系统,还可以应用在AIX等等的unix操作系统.在各种操作系统上部署过程有一些差别.下面说一下在AIX操 ...