如何直接访问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安全防范技巧分享
Nov 03 PHP
深入了解PHP类Class的概念
Jun 14 PHP
PHP JSON格式的中文显示问题解决方法
Apr 09 PHP
php中array_multisort对多维数组排序的方法
Jun 21 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
Jan 07 PHP
php基于dom实现的图书xml格式数据示例
Feb 03 PHP
PHP中Laravel 关联查询返回错误id的解决方法
Apr 01 PHP
PHP编程实现阳历转换为阴历的方法实例
Aug 08 PHP
PHP实现的数据对象映射模式详解
Mar 20 PHP
Smarty模板配置实例简析
Jul 20 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
Aug 05 PHP
YII2框架中actions的作用与使用方法示例
Mar 13 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中取得image按钮传递的name值
2006/10/09 PHP
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
PHP提示Notice: Undefined variable的解决办法
2012/11/24 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
2015/04/17 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
2016/07/14 PHP
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
Jquery解析json数据详解
2013/12/26 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
2015/11/03 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
2016/08/05 Javascript
使用JS代码实现点击按钮下载文件
2016/11/12 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
C#实现将一个字符转换为整数
2017/12/12 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
[01:34]传奇从这开始 2016国际邀请赛中国区预选赛震撼开启
2016/06/26 DOTA
Python抓取京东图书评论数据
2014/08/31 Python
wxPython定时器wx.Timer简单应用实例
2015/06/03 Python
Python编程中对文件和存储器的读写示例
2016/01/25 Python
Android应用开发中Action bar编写的入门教程
2016/02/26 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
Python使用Tkinter实现机器人走迷宫
2018/01/22 Python
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
德国自行车商店:Tretwerk
2019/06/21 全球购物
治庸问责心得体会
2014/09/12 职场文书
教师工作自我鉴定范文
2014/09/14 职场文书
2014年大学宣传部工作总结
2014/12/19 职场文书
2016年大学校运会广播稿件
2015/12/21 职场文书
《正比例》教学反思
2016/02/23 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python
Nginx四层负载均衡的配置指南
2021/06/11 Servers