如何直接访问php实例对象中的private属性详解
发布:smiling 来源: PHP粉丝网 添加日期:2018-09-13 15:27:56 浏览: 评论:0
本文主要介绍了关于如何直接访问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;
- }
- }
- //phpfensi.com
- $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赋值,竟然没有报错!
解释:因为同一个类的对象即使不是同一个实例也可以互相访问对方的私有与受保护成员。这是由于在这些对象的内部具体实现的细节都是已知的。
Tags: 实例 属性 private对象
- 上一篇:PHP中类的自动加载的方法
- 下一篇:PHP 中魔术常量的实例详解
相关文章
- ·PHP 中魔术常量的实例详解(2018-09-13)
- ·PHP对象实例化单例方法(2018-09-27)
- ·php魔术常量详解 php魔术常量实例代码(2018-09-28)
- ·PHP 类属性 类静态变量的访问(2013-11-14)
- ·php __get(),__set()函数来实现对属性的访问(2013-11-28)
- ·php final static const成员属性用法(2014-05-21)
- ·php类中protected与const属性详解(2014-06-13)
- ·php 遍历对象属性二种方法(2014-08-18)
- ·php中类和对象:静态属性、静态方法(2018-08-02)
- ·php 类中的常量、静态以及非静态属性之间的区别(2018-08-02)
- ·php static静态属性和静态方法的调用(2018-09-16)
- ·PHP学习之外部调用类的私有属性(2020-04-09)
- ·php面向对象中static静态属性与方法的内存位置分析(2021-05-10)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)