如何直接访问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在线打包程序源码
Jul 27 PHP
phpmyadmin导入(import)文件限制的解决办法
Dec 11 PHP
php中实现可以返回多个值的函数实例
Mar 21 PHP
PHP处理postfix邮件内容的方法
Jun 16 PHP
Symfony2实现在controller中获取url的方法
Mar 18 PHP
利用PHP实现一个简单的用户登记表示例
Apr 25 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
PHP调用接口用post方法传送json数据的实例
May 31 PHP
php微信公众号开发之简答题
Oct 20 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 PHP
PHP的重载使用魔术方法代码实例详解
Feb 26 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
一个捕获函数输出的函数
2007/02/14 PHP
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
PHP递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
jquery实现拖动效果
2016/08/10 Javascript
jQuery实现可拖拽3D万花筒旋转特效
2017/01/03 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
VUE.js实现动态设置输入框disabled属性
2019/10/28 Javascript
如何封装Vue Element的table表格组件
2021/02/06 Vue.js
Python中操作mysql的pymysql模块详解
2016/09/13 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
VSCode中自动为Python文件添加头部注释
2019/11/14 Python
从numpy数组中取出满足条件的元素示例
2019/11/26 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
国家地理在线商店:Shop National Geographic
2018/06/30 全球购物
斯福泰克软件测试面试题
2015/02/16 面试题
模具设计与制造专业应届生求职信
2013/10/18 职场文书
音乐器材管理制度
2014/01/31 职场文书
市场调查策划方案
2014/06/10 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
教师个人考察材料
2014/12/16 职场文书
2015年销售助理工作总结
2015/05/11 职场文书
心术观后感
2015/06/11 职场文书
解决Maven项目中 Invalid bound statement 无效的绑定问题
2021/06/15 Java/Android
Windows Server 修改远程桌面端口的实现
2022/06/25 Servers