如何直接访问php实例对象中的private属性详解


Posted in PHP onOctober 12, 2017

前言

本文主要介绍了关于如何直接访问php实例对象中private属性的相关内容,在介绍关键部分之前,我们先回顾一下php面向对象的访问控制。

对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。

类属性必须定义为公有,受保护,私有之一。如果用 var 定义,则被视为公有。

请看下面示例代码(来自官方文档:http://php.net/manual/en/language.oop5.visibility.php

<?php
/**
 * Define MyClass
 */
class MyClass
{
 public $public = 'Public';
 protected $protected = 'Protected';
 private $private = 'Private';

 function printHello()
 {
  echo $this->public;
  echo $this->protected;
  echo $this->private;
 }
}

$obj = new MyClass();
echo $obj->public; // Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private

如上面代码所示,我们用一个类的实例对象访问一个类的私有或者受保护的成员属性时,会抛出一个致命错误。

下面是文章标题要做的事情,访问php实例对象的私有属性。

按照我们正常的做法,一般都会是写一个public的方法,再返回这个属性。

public function getPrivate()
{
 return $this->private;
}

事实是我们本就应该这样做。

下面说是只是特殊场景下的使用方法,平时写代码希望大家不要乱来。

<?php
class A {
 private $a = 'self';
 public function test() {
  $other = new self();
  $other->a = 'other';
  var_dump($other->a);
 }
}

$aa = new A();
$aa->test();

如上代码所示,我们new了一个新的A对象出来,再给这个实例的私有属性a赋值,竟然没有报错!

解释:因为同一个类的对象即使不是同一个实例也可以互相访问对方的私有与受保护成员。这是由于在这些对象的内部具体实现的细节都是已知的。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
PHP 简单日历实现代码
Oct 28 PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 PHP
php_screw 1.5:php加密: 安装与使用详解
Jun 20 PHP
解析php常用image图像函数集
Jun 24 PHP
php strrpos()与strripos()函数
Aug 31 PHP
php采用ajax数据提交post与post常见方法总结
Nov 10 PHP
浅析PHP中Session可能会引起并发问题
Jul 23 PHP
最新制作ThinkPHP3.2.3完全开发手册
Nov 23 PHP
Yii2框架数据库简单的增删改查语法小结
Aug 31 PHP
thinkPHP实现多字段模糊匹配查询的方法
Dec 01 PHP
php从数据库中读取特定的行(实例)
Jun 02 PHP
goto语法在PHP中的使用教程
Sep 17 PHP
thinkphp中的多表关联查询的实例详解
Oct 12 #PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
Oct 12 #PHP
利用PHP实现开心消消乐的算法示例
Oct 12 #PHP
深入理解PHP中mt_rand()随机数的安全
Oct 12 #PHP
php表单习惯用的正则表达式
Oct 11 #PHP
彻底搞懂PHP 变量结构体
Oct 11 #PHP
利用php + Laravel如何实现部署自动化详解
Oct 11 #PHP
You might like
PHP教程 基本语法
2009/10/23 PHP
PHP操作MongoDB GridFS 存储文件的详解
2013/06/20 PHP
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
2015/09/30 PHP
初识javascript 文档碎片
2010/07/13 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
详解js静态资源文件请求的处理
2017/08/01 Javascript
node中Express 动态设置端口的方法
2017/08/04 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
Vue 2.5.2下axios + express 本地请求404的解决方法
2018/02/21 Javascript
vue项目base64字符串转图片的实现代码
2018/07/13 Javascript
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
Python常用模块用法分析
2014/09/08 Python
Python实现包含min函数的栈
2016/04/29 Python
python验证码识别的示例代码
2017/09/21 Python
pycharm远程调试openstack的图文教程
2017/11/21 Python
python的unittest测试类代码实例
2017/12/07 Python
python PyTorch参数初始化和Finetune
2018/02/11 Python
Python中字符串List按照长度排序
2019/07/01 Python
python yield关键词案例测试
2019/10/15 Python
通过实例解析Python return运行原理
2020/03/04 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
耐克美国官网:Nike.com
2016/08/01 全球购物
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
介绍Java的内部类
2012/10/27 面试题
初中生学习生活的自我评价
2013/11/20 职场文书
节能宣传周活动总结
2014/05/08 职场文书
优秀工会工作者事迹材料
2014/06/02 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书
浅析MySQL如何实现事务隔离
2021/06/26 MySQL