如何直接访问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 相关文章推荐
模拟OICQ的实现思路和核心程序(三)
Oct 09 PHP
PHP5 操作MySQL数据库基础代码
Sep 29 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
Jan 14 PHP
php使用递归函数实现数字累加的方法
Mar 16 PHP
PHP使用Pthread实现的多线程操作实例
Nov 14 PHP
PHP简单实现无限级分类的方法
May 13 PHP
php实现图片按比例截取的方法
Feb 06 PHP
php通过各种函数判断0和空
Jul 04 PHP
windows环境下使用Composer安装ThinkPHP5
May 18 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
Sep 26 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 PHP
php的lavarel框架中join和orWhere的用法
Dec 28 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
深入Nginx + PHP 缓存详解
2013/07/11 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
2014/02/13 PHP
php使用指定编码导出mysql数据到csv文件的方法
2015/03/31 PHP
php实现背景图上添加圆形logo图标的方法
2016/11/17 PHP
js判断屏幕分辨率的代码
2013/07/16 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
Vue resource中的GET与POST请求的实例代码
2017/07/21 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
通过C++学习Python
2015/01/20 Python
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
Python Pandas 对列/行进行选择,增加,删除操作
2020/05/17 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
2020/06/22 Python
自荐信格式写作方法有哪些呢
2013/11/20 职场文书
物业管理员岗位职责范文
2013/11/25 职场文书
党员培训思想汇报
2014/01/07 职场文书
称象教学反思
2014/02/03 职场文书
市场营销工作计划书
2014/05/06 职场文书
学党史心得体会
2014/09/05 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
JavaScript执行机制详细介绍
2021/12/06 Javascript
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python