【后端开辟】怎样直接接见php实例对象的private属性

在引见症结部份之前,我们先回忆一下php面向对象的接见掌握。

对属性或要领的接见掌握,是经由过程在前面增加症结字 public(公有),protected(受庇护)或 private(私有)来完成的。被定义为公有的类成员能够在任何地方被接见。被定义为受庇护的类成员则能够被其本身以及其子类和父类接见。被定义为私有的类成员则只能被其定义地点的类接见。

类属性必需定义为公有,受庇护,私有之一。假如用 var 定义,则被视为公有。

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

<?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实例对象的private属性的细致内容,更多请关注ki4网别的相干文章!

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注