如何直接访问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 相关文章推荐
PHP3 safe_mode 失效漏洞
Oct 09 PHP
[原创]PHP中通过ADODB库实现调用Access数据库之修正版本
Dec 31 PHP
PHP mb_convert_encoding文字编码的转换函数介绍
Nov 10 PHP
file_get_contents获取不到网页内容的解决方法
Mar 07 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
Jul 06 PHP
PHP实现的回溯算法示例
Aug 15 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
May 12 PHP
PHP实现的文件浏览器功能简单示例
Sep 12 PHP
tp5 sum某个字段相加得到总数的例子
Oct 18 PHP
在laravel中实现ORM模型使用第二个数据库设置
Oct 24 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
Apr 06 PHP
详解Laravel制作API接口
May 31 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 HtmlReplace输入过滤安全函数
2010/07/03 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
2014/11/18 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
认识延迟时间为0的setTimeout
2008/05/16 Javascript
简略说明Javascript中的= =(等于)与= = =(全等于)区别
2013/04/16 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
javascript实现简单的html5视频播放器
2015/05/06 Javascript
jquery SweetAlert插件实现响应式提示框
2015/08/18 Javascript
jQuery动态改变多行文本框高度的方法
2016/09/07 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
node.js中debug模块的简单介绍与使用
2017/04/25 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
Angular使用cli生成自定义文件、组件的方法
2018/09/04 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
关于JSON解析的实现过程解析
2019/10/08 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
Python3实现的字典、列表和json对象互转功能示例
2018/05/22 Python
python aiohttp的使用详解
2019/06/20 Python
python 实现GUI(图形用户界面)编程详解
2019/07/17 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
什么是python的列表推导式
2020/05/26 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
应届生如何写自荐信
2014/01/05 职场文书
解除劳动合同协议书范本
2014/09/13 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
python中subplot大小的设置步骤
2021/06/28 Python
德生BCL3000抢先使用感受和评价
2022/04/07 无线电