【问题标题】:PHP class private property and methodPHP类私有属性和方法
【发布时间】:2013-08-16 13:19:19
【问题描述】:

注意到一些关于 PHP 的类的东西,我不知道它是否是一个错误或它为什么会起作用,这是代码:

<?php
class A {
    private $prop = 'value';

    public function fun()
    {
        $obj = new A;
        $obj->echoProp();
    }

    private function echoProp()
    {
        echo 'Prop has value: '.$this->prop;
    }
}

$obj = new A;
$obj->fun();

结果不是我所期望的错误,因为我正在调用一个私有方法(在 PHP 5.3.10-1ubuntu3.7 上使用 Suhosin-Patch 进行了测试)。结果是“Prop has value: value”

【问题讨论】:

  • 如果不是从公共方法调用私有方法,您会如何期望?
  • 具体来说,您不是在调用私有方法,而是在调用一个调用私有方法的公共方法。公共方法可以访问私有方法,但调用$obj-&gt;echoProp(); 将失败,因为在这种情况下您正在调用私有方法。如果您的期望是真实的,那么没有任何东西可以调用私有方法。

标签: php oop private private-members private-methods


【解决方案1】:

在 php 文档 http://www.php.net/manual/en/language.oop5.visibility.php#language.oop5.visibility-other-objects 中说:

其他对象的可见性

相同类型的对象可以互相访问私有和 受保护的成员,即使它们不是相同的实例。这是 因为实现的具体细节是已知的 在这些对象中。

所以这不是一个错误,而是 php 的一个想要的功能。

【讨论】:

    【解决方案2】:

    只要你在班级里,你就可以在任何实例上调用你班级的私有方法。

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 2017-03-13
      • 2016-04-24
      • 2014-11-03
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多