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虽然支持重载,但我们最好不要这么做。首先,破坏了访问封装,其次,动态的创建的属性和方法,只是为当前实例添加了这些属性方法,类的其他实例并没有这些属性和方法。

纯属个人见解,欢迎批评指正

时间: 2024-12-10 18:04:24

php 访问控制和重载的相关文章

限制对象在堆或栈中声明

***********************************************声明************************************************************ 原创作品,出自 "晓风残月xj" 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/xiaofengcanyuexj). 由于各种原因,可能存在诸多不足,欢迎斧正! *************************************

PHP学习计划

从开始学习PHP到现在,只是大致的对PHP的一些基础的东西了解一下,从没有制定一个较为完整的学习计划,所以自己的编程水平一直都处在基本的入门阶段,所以结合自己的实际情况制定了一个感觉还算合理的学习计划,既然计划制定了,就要经自己最大的努力去把它给完成.   一.Linux方面 Linux常用命令 1. 文件处理命令2. 权限管理命令3. 帮助命令4. 文件搜索命令5. 压缩解压命令6. 命令使用技巧7. 文本编辑器Vim 掌握Linux常见命令操作,学会Linux基本使用,熟悉Linux下文本编

知识结构体系

一.Linux方面 Linux常用命令 1. 文件处理命令2. 权限管理命令3. 帮助命令4. 文件搜索命令5. 压缩解压命令6. 命令使用技巧7. 文本编辑器Vim 掌握Linux常见命令操作,学会Linux基本使用,熟悉Linux下文本编辑器. Linux系统管理1. 软件包管理2. 用户和用户组管理3. 服务与进程管理 掌握Linux系统常见的系统管理操作. Linux网络应用 1. 基本网络设置2. 网络文件共享 掌握Linux系统常见的网络配置文件和命令,熟悉文件共享服务SSH.FTP

J2SE之面向对象_重载_this_static_package_import_继承_访问控制

方法的重载 构造方法重载 对象的创建和使用 class Point { private double x; private double y; Point(double x1, double y1) { x = x1; y = y1; } public double getX() { return x; } public double getY() { return y; } public void setX(double i) { x = i; } public void setY(doubl

面向对象(访问控制、继承、重载)

=begin Public 方法: Public 方法可被任意对象调用.默认情况下,方法都是 public 的,initialize 方法总是 private 的. Protected 方法: Protected 方法只能被类及其子类的对象调用.访问也只能在类及其子类内部进行. Private 方法: Private 方法不能被明确的接受者调用,其接受者只能是self,所以只能在当前对象的上下文中被调用 =end class Box # 构造器方法 def initialize(w,h) @wi

属性重载和单例模式

一.属性重载 /* 属性重载 在给不可访问属性赋值时,__set() 会被调用. 读取不可访问属性的值时,__get() 会被调用. 当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用. 当对不可访问属性调用 unset() 时,__unset() 会被调用. */ //不可访问即是不存在或者是受访问控制修饰符的限制 //__set中也只给用户设置一些基本连接信息,$name是不可访问属性的名,$value为值 public function __set(

httpd虚拟主机配置及基于用户的访问控制

本文旨在实践httpd虚拟主机及基于用户的访问控制 知识储备 虚拟主机有三种实现方案: 基于ip: 为每个虚拟主机准备至少一个独有ip地址: 基于port: 为每个虚拟主机使用至少一个独有的port: 基于FQDN: 为每个虚拟主机使用至少一个FQDN: 注意:一般虚拟机不要与中心主机混用:因此,要使用虚拟主机,得先禁用'main'主机: 禁用方法:注释中心主机的DocumentRoot指令即可: 基于用户的访问控制: http协议认证方式2种 basic:明文 digest:消息摘要认证 本次

Nginx简介及用户认证、访问控制和反向代理配置

Nginx 是一个很强大的高性能Web和反向代理服务器及及电子邮件(IMAP/POP3)代理服务器,由俄罗斯程序员设计师Igor Syaoev所开发,官方网站:http://nginx.org/  特点是占有内存少.并发能力强. Nginx配置文件及目录简介: - /usr/local/nginx/                                                           安装目录 - /usr/local/nginx/conf/nginx.conf  

重载和重写的区别与联系

这三个概念都是与Java中的多态有关系的.如果单是区别重载与覆盖这两个概念是比较容易的,但是隐藏这一概念却使问题变得有点复杂了, 下面说说它们的区别吧.        重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同.调用的时候根据函数的参数来区别不同的函数. 覆盖(也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现.即函数名和参数都一样,只是函数的实现体不一样. 隐藏是指派生类中的函数把基类中相同名字的函数屏蔽掉了.隐藏与另外两个概念表面上看来很像,很难区分,