如何直接访问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目录管理函数小结
Sep 10 PHP
初识laravel5
Mar 02 PHP
php获取错误信息的方法
Jul 17 PHP
PHP数组游标实现对数组的各种操作详解
Jan 26 PHP
9个比较实用的php代码片段
Mar 15 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
Apr 07 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
Apr 11 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
在PHP中实现使用Guzzle执行POST和GET请求
Oct 15 PHP
Laravel定时任务的每秒执行代码
Oct 22 PHP
Laravel6.18.19如何优雅的切换发件账户
Jun 14 PHP
php慢查询日志和错误日志使用详解
Feb 27 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实现原生态图片上传封装类方法
2016/11/08 PHP
摘自百度的图片轮换效果代码
2007/11/19 Javascript
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
Android中的jQuery:AQuery简介
2014/05/06 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
2014/09/13 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
jQuery获取同级元素的简单代码
2016/07/09 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
nodejs开发微信小程序实现密码加密
2017/07/11 NodeJs
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
2018/10/23 Javascript
javascript实现的时间格式加8小时功能示例
2019/06/13 Javascript
JS删除String里某个字符的方法
2021/01/06 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
基于vue、react实现倒计时效果
2019/08/26 Javascript
jQuery 动态粒子效果示例代码
2020/07/07 jQuery
JSONObject与JSONArray使用方法解析
2020/09/28 Javascript
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
python binascii 进制转换实例
2019/06/12 Python
python中取绝对值简单方法总结
2020/07/24 Python
高性能钓鱼服装:Huk Gear
2019/02/20 全球购物
Tom Dixon官网:英国照明及家具设计和制造公司
2019/03/01 全球购物
导游实习生自荐书
2014/01/28 职场文书
棉花姑娘教学反思
2014/02/15 职场文书
学校招生宣传广告词
2014/03/19 职场文书
员工生日会策划方案
2014/06/14 职场文书
上课随便讲话检讨书
2014/09/12 职场文书
项目投资意向书范本
2015/05/09 职场文书
办公用品管理制度
2015/08/04 职场文书
Pytorch中expand()的使用(扩展某个维度)
2022/07/15 Python