如何直接访问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的ob_start来生成静态页面的方法分析
Mar 09 PHP
PHP之APC缓存详细介绍 apc模块安装
Jan 13 PHP
PHP采集静态页面并把页面css,img,js保存的方法
Dec 23 PHP
PHP实现WebService的简单示例和实现步骤
Mar 27 PHP
php+html5基于websocket实现聊天室的方法
Jul 17 PHP
PHP获取用户访问IP地址的5种方法
May 16 PHP
详解PHP中websocket的使用方法
Sep 15 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
Apr 25 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
PHP PDOStatement::nextRowset讲解
Feb 01 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
Oct 21 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
Mar 16 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+JQUERY操作JSON实例
2017/03/23 PHP
老生常谈PHP数组函数array_merge(必看篇)
2017/05/25 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
a标签的css样式四个状态
2021/03/09 HTML / CSS
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
对frameset、frame、iframe的js操作示例代码
2013/08/16 Javascript
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
jquery 实现窗口的最大化不论什么情况
2013/09/03 Javascript
javascript的函数作用域
2014/11/12 Javascript
jQuery 重复加载错误以及修复方法
2014/12/16 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
简单实现的JQuery文本框水印插件
2016/06/14 Javascript
老生常谈JavaScript 函数表达式
2016/09/01 Javascript
微信小程序 Flex布局详解
2016/10/09 Javascript
flag和jq on 的绑定多个对象和方法(必看)
2017/02/27 Javascript
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
angular第三方包开发整理(小结)
2018/04/19 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
2018/09/14 Javascript
了解JavaScript中的选择器
2019/05/24 Javascript
[02:04]完美世界城市挑战赛秋季赛报名开始 谁是solo路人王?
2019/10/10 DOTA
Python多线程实例教程
2014/09/06 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
python global关键字的用法详解
2019/09/05 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
python之pygame模块实现飞机大战完整代码
2020/11/29 Python
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
战略合作意向书范本
2014/04/01 职场文书
服务承诺书格式
2014/05/21 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
python元组打包和解包过程详解
2021/08/02 Python
教你修复 Win11应用商店加载空白问题
2021/12/06 数码科技
table不让td文字溢出操作方法
2022/12/24 HTML / CSS