【问题标题】:How can I protect a class property from extending classes in PHP?如何保护类属性免于在 PHP 中扩展类?
【发布时间】:2011-08-20 23:24:43
【问题描述】:

是否可以这样做:

class foo {
    private $private = 'A';
}

class bar extends foo {
    echo $this->private;
}

bar returns null...

如果变量 $private 不能被子类访问,我真的很高兴,但我不确定它是否可能仅仅基于基于类的开发范式。

私有属性不提供我正在寻找的功能。

我知道这不是准确的 PHP 代码,但这只是一个示例;)

【问题讨论】:

    标签: php class visibility private class-visibility


    【解决方案1】:

    这就是它已经工作的方式。见documentation:

    属性或方法的可见性可以通过在声明前加上关键字public、protected或private来定义。声明为 public 的类成员可以在任何地方访问。声明为 protected 的成员只能在类本身内以及被继承类和父类访问。 声明为私有的成员只能由定义该成员的类访问。

    在此处查看示例:http://codepad.org/Yz4yjDft

    私有属性不提供我正在寻找的功能。

    在我看来,这正是你想要的。如果不是,请详细说明。

    【讨论】:

    • 经过一番思考——我们的子类没有写入父“私有”属性——它在该命名空间中创建了自己的变量,因为它不知道父变量存在。我们用 parent::$private 对其进行了测试。对我来说有趣的小案例测试;)
    【解决方案2】:
    class foo {
        protected $private = 'A';
    }
    
    class bar extends foo {
        function __construct() {
            echo $this->private;
        }
    }
     new bar();
    
    // will echo 'A' 
    

    你只需要在一个函数内部进行处理,你不能在你的类里面有回显。

    编辑:

    protected 将允许您仅在后代类中使用该变量。如果这就是你要找的东西

    【讨论】:

    • 什么版本的 PHP 可以做到这一点?
    • 我们实际上希望通过扩展类向开发人员隐藏一些变量。获得批准的答案确实使这一点打在了头上。
    猜你喜欢
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 2021-10-07
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多