如何直接访问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 相关文章推荐
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 PHP
PHP sprintf() 函数的应用(定义和用法)
Jun 29 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
Jun 21 PHP
php基于str_pad实现卡号不足位数自动补0的方法
Nov 12 PHP
PHP中实现Bloom Filter算法
Mar 30 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
May 13 PHP
PHP代码优化技巧小结
Sep 29 PHP
PHP中子类重载父类的方法【parent::方法名】
May 06 PHP
php用户密码加密算法分析【Discuz加密算法】
Oct 12 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
Mar 28 PHP
PHP获取文本框、密码域、按钮的值实例代码
Apr 19 PHP
PHP7 list() 函数修改
Mar 09 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/20 PHP
详解laravel安装使用Passport(Api认证)
2018/07/27 PHP
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
JavaScript语言核心数据类型和变量使用介绍
2013/08/23 Javascript
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
AngularJs expression详解及简单示例
2016/09/01 Javascript
bootstrap table 数据表格行内修改的实现代码
2017/02/13 Javascript
jQuery判断邮箱格式对错实例代码讲解
2017/04/12 jQuery
vue复合组件实现注册表单功能
2017/11/06 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
微信小程序分享海报生成的实现方法
2018/12/10 Javascript
Layui数据表格之单元格编辑方式
2019/10/26 Javascript
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
2015/04/25 Python
python中尾递归用法实例详解
2015/04/28 Python
将pandas.dataframe的数据写入到文件中的方法
2018/12/07 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
CSS3为背景图设置遮罩并解决遮罩样式继承问题
2020/06/22 HTML / CSS
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
2021/02/24 HTML / CSS
html5版canvas自由拼图实例
2014/10/15 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
高中生操行评语大全
2014/04/25 职场文书
怎样写离婚协议书
2015/01/26 职场文书
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python