【问题标题】:Strange working php code regarding protected visibility关于受保护可见性的奇怪工作 php 代码
【发布时间】:2011-07-21 22:03:14
【问题描述】:
类水果{ 受保护的$混合; 公共函数 WillItBlend() { 返回 $this-> 混合; } 公共静态函数 MakeFruit() { $objF = 新水果(); $objF->混合=真; 返回 $objF; } } $fruit = Fruit::MakeFruit(); 回声 $fruit->WillItBlend();

为什么这条线有效

$objF->blend = true;
而不是抛出致命错误?

【问题讨论】:

  • +1 让我想要一杯冰沙。

标签: php visibility


【解决方案1】:

可见性修饰符在类级别起作用,而不是在对象级别。这也意味着同一类的对象可以访问彼此的私有位。

PHP 交互式提示的示例:

php > class Foo {
        private $bar;
        public function __construct() { $this->bar = rand(1, 100); } 
        public function baz($another_foo) { echo $another_foo->bar, '-', $this->bar; }
    }
php > $a = new Foo();
php > $b = new Foo();
php > $a->baz($b);
86-70

【讨论】:

    【解决方案2】:

    $objF 是类Fruit 的实例。

    $objF->blend 正在类本身中使用。 Protected 属性可以在类本身中使用。

    如果你在课堂外使用 $fruit->blend; 会出现致命错误

    所以允许这样做。

    【讨论】:

      【解决方案3】:

      因为你是从班级内部访问它,如果你想从班级外部调用它

      $fruit = Fruit::MakeFruit();
      echo $fruit->WillItBlend();
      echo $fruit->blend; 
      

      它会抛出一个致命错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-26
        • 2016-02-18
        • 1970-01-01
        • 2011-06-06
        • 1970-01-01
        • 2016-02-19
        • 1970-01-01
        • 2018-05-16
        相关资源
        最近更新 更多