繁体   English   中英

PHP受保护的类和属性,受到谁的保护?

[英]PHP protected classes and properties, protected from whom?

我刚刚开始使用David Powers 的面向PHP面向对象解决方案的OOP PHP,并且对OOP中的保护概念有点好奇。

作者清楚地解释了保护是如何起作用的,但是关于不希望别人能够改变属性的一点点有点平淡。 我很难想象有可能阻止其他人改变你的课程,因为他们可以打开你的class.php并手动调整他们喜欢看到的PHP如何总是用纯文本。

注意:以上所有内容均由初学者编写,初学者对编程有所了解。

从你自己!

您可以使用各种级别的保护来指示您希望如何使用类。 如果类成员protectedprivate ,则只能由类本身访问。 您无法从“外部”代码(类外的代码)中意外地搞砸该成员的价值。

假设您有一个只应包含数字的类成员。 你使它protected并添加一个setter,它检查它的值只能是数字:

class Foo {

    protected $num = 0;

    public function setNum($num) {
        if (!is_int($num)) {
            throw new Exception('Not a number!!!');
        }
        $this->num = $num;
    }
}

现在你可以确定Foo::$num在你想要使用时总是包含一个数字。 只要您想使用它,就可以跳过很多额外的错误检查代码。 任何时候你尝试为它分配除数字之外的任何东西,你会得到一个非常响亮的错误信息,这使得很容易找到错误。

这是对你自己的限制,以减轻你自己的工作。 因为程序员会犯错误。 特别是像PHP这样的动态类型语言让你在没有注意的情况下默默地犯了很多错误,后来变成了很难调试,非常严重的错误。

就其本质而言,软件非常柔软 ,很容易降级为无法维护的Rube Goldberg逻辑机器。 OOP,封装,可见性修饰符, 类型提示等是PHP使您能够使代码“更难”的工具,表达您对代码的某些部分的意图,并使PHP能够为您强制执行此意图。

受保护并不是真正保护任何人都不能更改源代码,而只是PHP OOP中类方法可见性

声明为public的类成员可以随处访问。 声明受保护的成员只能在类本身以及继承和父类中访问。 声明为private的成员只能由定义该成员的类访问。

他们的意思是他们受到不同方式的保护......

  • 私有变量除了在类中之外的任何地方都不可见。
  • 受保护的变量对于实例化的对象是不可见的,但对于从该类继承的类以及类本身可见的。

没有什么能阻止其他程序员打开类文件并更改访问修饰符。

隐藏数据是一件好事,因为您暴露的越少,您可以控制的越多,可能引入的错误就越少。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM