【问题标题】:New to PHP , protected function error [duplicate]PHP新手,受保护的函数错误[重复]
【发布时间】:2017-08-05 00:57:48
【问题描述】:

所以,我是 PHP 新手,我知道这对你们很多人来说是一个简单的问题,但我不确定一件事。

如果我有这个,新对象$a$d不能回显function foo(),因为它是受保护的,所以这意味着只有子类可以使用它,OBJECT不能? 这对我来说有点混乱。

对不起,如果这是一个愚蠢的问题,但我没有 php 朋友来问这个。

<?php

    class A {
        protected function foo(){
            echo "AAA";
        }
    }

    class D extends A { }

    $a = new A();
    $d = new D();
    $a->foo();
    $d->foo();
?>

【问题讨论】:

  • 它只能从拥有它的类或扩展它的类中调用。私有函数只能从拥有它的类中调用。可以像您在上面尝试做的那样全局调用公共函数

标签: php class object protected


【解决方案1】:

因为是protected的,所以说只有子类可以使用,OBJECT不能用?

objectclassinstance。这些是不等价的。

对于您的问题 - 外部只能访问 public 方法。所以你不能$d-&gt;foo(),但即D类可以有公共方法x(),它只会做$this-&gt;foo(),因为x是类的一部分,所以它可以到达protected元素。

【讨论】:

    【解决方案2】:

    检查这个。这就是它的工作方式。

    class A {
        protected function foo(){
            echo "AAA";
        }
    }
    
    class D extends A {
        public function foo2() {
            $a = new A();
            $a->foo();
        }
     }
    
    //$a = new A();
    $d = new D();
    //$a->foo();
    $d->foo2();
    

    【讨论】:

    • 而不是 $a = new A(); $a->foo();只需使用 $this->foo();因为它已经扩展了
    • 是的,我同意。这也是可能的
    猜你喜欢
    • 1970-01-01
    • 2013-02-19
    • 2016-10-13
    • 2014-02-20
    • 2011-05-02
    • 1970-01-01
    • 2021-06-09
    • 2012-09-21
    • 2012-03-27
    相关资源
    最近更新 更多