如何直接访问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中使用Oracle数据库(5)
Oct 09 PHP
介绍几个array库的新函数 php
Dec 29 PHP
生成ubuntu自动切换壁纸xml文件的php代码
Jul 17 PHP
解决File size limit exceeded 错误的方法
Jun 14 PHP
php addslashes 利用递归实现使用反斜线引用字符串
Aug 05 PHP
php检测文件编码的方法示例
Apr 25 PHP
基于PHP实现简单的随机抽奖小程序
Jan 05 PHP
PHP5.4起内置web服务器使用方法
Aug 09 PHP
php执行多个存储过程的方法【基于thinkPHP】
Nov 08 PHP
PHP 实现从数据库导出到.csv文件方法
Jul 06 PHP
PHP的PDO事务与自动提交
Jan 24 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
Dec 30 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
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
js实现防止被iframe的方法
2015/07/03 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
2017/02/27 Javascript
vue权限问题的完美解决方案
2019/05/08 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
Python入门篇之字典
2014/10/17 Python
python下paramiko模块实现ssh连接登录Linux服务器
2015/06/03 Python
基于Python的接口测试框架实例
2016/11/04 Python
Python制作Windows系统服务
2017/03/25 Python
python的pdb调试命令的命令整理及实例
2017/07/12 Python
Python日期时间对象转换为字符串的实例
2018/06/22 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
HTML5新增的8类INPUT输入类型介绍
2015/07/06 HTML / CSS
瑞典快乐袜子:Happy Socks
2018/02/16 全球购物
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
如何提高JDBC的性能
2013/04/30 面试题
《都江堰》教学反思
2014/02/07 职场文书
2014年最新学习全国两会精神心得
2014/03/17 职场文书
村级换届选举方案
2014/05/10 职场文书
幼儿园大班区域活动总结
2014/07/09 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
出国导师推荐信
2015/03/25 职场文书
Html5生成验证码的示例代码
2021/05/10 Javascript
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技