如何直接访问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 相关文章推荐
一个程序下载的管理程序(三)
Oct 09 PHP
PHP 简单数组排序实现代码
Aug 05 PHP
PHP项目开发中最常用的自定义函数整理
Dec 02 PHP
PHP 字符串正则替换函数preg_replace使用说明
Jul 15 PHP
解析php中memcache的应用
Jun 18 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
Aug 13 PHP
PHP magento后台无法登录问题解决方法
Nov 24 PHP
php微信公众号js-sdk开发应用
Nov 28 PHP
php数值转换时间及时间转换数值用法示例
May 18 PHP
php实现自定义中奖项数和概率的抽奖函数示例
May 26 PHP
使用Laravel中的查询构造器实现增删改查功能
Sep 03 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
Apr 29 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
农民C键的运用技巧
2020/03/04 星际争霸
关于php循环跳出的问题
2013/07/01 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
PHP设置一边执行一边输出结果的代码
2013/09/30 PHP
PHP通过串口实现发送短信
2015/07/08 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
2018/04/04 PHP
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
jQuery 重复加载错误以及修复方法
2014/12/16 Javascript
javascript中数组方法汇总
2015/07/07 Javascript
jQuery设置Cookie及删除Cookie实例分析
2016/04/15 Javascript
深入理解React中es6创建组件this的方法
2016/08/29 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
angular4自定义组件详解
2017/09/28 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
python的类方法和静态方法
2014/12/13 Python
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
pandas数据清洗,排序,索引设置,数据选取方法
2018/05/18 Python
在Python中字典根据多项规则排序的方法
2019/01/21 Python
python实现低通滤波器代码
2020/02/26 Python
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
棉花姑娘教学反思
2014/02/15 职场文书
服装发布会策划方案
2014/05/22 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
学习计划是什么
2019/04/30 职场文书
JS ES6异步解决方案
2021/04/29 Javascript
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB
Python四款GUI图形界面库介绍
2022/06/05 Python
JS高级程序设计之class继承重点详解
2022/07/07 Javascript