资讯专栏INFORMATION COLUMN

教你如何直接访问php实例对象的private属性

Gilbertat / 3073人阅读

摘要:被定义为公有的类成员可以在任何地方被访问。请看下面示例代码来自官方文档如上面代码所示我们用一个类的实例对象访问一个类的私有或者受保护的成员属性时,会抛出一个致命错误。下面是文章标题要做的事情,访问实例对象的私有属性。

在介绍关键部分之前,我们先回顾一下php面向对象的访问控制。

对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。

类属性必须定义为公有,受保护,私有之一。如果用 var 定义,则被视为公有。

请看下面示例代码(来自官方文档 http://php.net/manual/en/lang...:

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;
}

事实是我们本就应该这样做。

下面说是只是特殊场景下的使用方法,平时写代码希望大家不要乱来。

a = "other";
        var_dump($other->a);
    }
}

$aa = new A();
$aa->test();

如上代码所示,我们new了一个新的A对象出来,再给这个实例的私有属性a赋值,竟然没有报错!

解释:因为同一个类的对象即使不是同一个实例也可以互相访问对方的私有与受保护成员。这是由于在这些对象的内部具体实现的细节都是已知的。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25957.html

相关文章

  • PHP_OOP

    摘要:特殊在,方法被对象调用执行时,会自动确定是那个对象调用的该方法,会使用该对象为方法内的赋值构造析构类,没有作用域,作用域,只是讲,函数内和函数外。析构在对象消失对象被销毁时,也会自动执行一个方法,称之为析构方法。 相关定义 对象(object):现实生活中的实体,在编程语言中的体现。实体都有属性和功能。一组数据,和操作管理这些数据的操作,定义在一起就形成了一个实体,称之为对象。(属性和...

    RiverLi 评论0 收藏0
  • 手把手教你如何安装wordpress,怎么样搭建个人博客!

    摘要:轻量应用服务器是阿里云面向入门级云计算及简单应用用户,提供基于单台云服务器的域名管理应用部署安全和运维管理的一站式综合服务。轻量应用服务器,是可快速搭建且易于管理的轻量级云服务器。上传至云服务器,用或者都可以。总结一下使用wordpress搭建个人博客的三大步骤: 1.购买阿里云服务器 2.选择安装wordpress镜像操作系统 3.安装配置wordpress 4.购买域名,配置域名...

    Richard_Gao 评论0 收藏0
  • PHP面试常考内容之面向对象(3)

    摘要:面试专栏正式起更,每周一三五更新,提供最好最优质的面试内容。继上一篇面试常考内容之面向对象发表后,今天更新面向对象的最后一篇。面向对象的主要特征为封装继承多态。为了提高内聚性减少引起变化,单一原则是低耦合高内聚的面向原则上的引申。 PHP面试专栏正式起更,每周一、三、五更新,提供最好最优质的PHP面试内容。继上一篇PHP面试常考内容之面向对象(2)发表后,今天更新面向对象的最后一篇(3...

    xfee 评论0 收藏0
  • 教你如何在@ViewChild查询之前获取ViewContainerRef

    摘要:使用指令代替查询每一个指令都可以在它的构造器中注入引用。让我们声明这样一个指令我已经在构造器中添加了检查代码来保证视图容器在指令实例化的时候是可用的。 原文:https://blog.angularindepth.c...作者:Max Koretskyi译者:而井 【翻译】教你如何在@ViewChild查询之前获取ViewContainerRef showImg(https://se...

    suxier 评论0 收藏0
  • 教你用Java字节码做点有趣

    摘要:字节码是程序的中间表示形式介于人类可读的源码和机器码之间。在中一般是用编译源文件变成字节码,也就是我们的文件。字节码的执行操作,指的就是对当前栈帧数据结构进行的操作。 0.写在前面 为什么会写这篇文章呢?主要是之前调研过日志脱敏相关的一些,具体可以参考LOG4j脱敏插件如何编写里面描述了日志脱敏插件编写方法: 直接在toString中修改代码,这种方法很麻烦,效率低,需要修改每一个要...

    hqman 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<