我刚刚开始使用David Powers的 PHP面向对象解决方案开始使用OOP PHP,并对OOP中的保护概念有点好奇。
作者清楚地解释了保护是如何起作用的,但是关于不希望其他人改变属性的一点点有点平淡。我很难想象有可能阻止其他人改变你的课程,因为他们可以打开你的class.php
并手动调整他们喜欢看到的PHP如何总是用纯文本
注意:以上所有内容均由初学者编写,初学者对编程有所了解。
答案 0 :(得分:17)
来自你自己!
您可以使用各种级别的保护来指示您希望如何使用类。如果类成员是protected
或private
,则只能由类本身访问。您无法从“外部”代码(类外的代码)中意外地搞砸该成员的价值。
假设您有一个只应包含数字的类成员。你创建它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,封装,可见性修饰符,type hinting等是PHP为您提供的代码“更难”的工具,表达您希望代码的某些部分的意图,并使PHP能够为您强制执行此意图
答案 1 :(得分:6)
受保护的并不是真正保护任何人都无法更改源代码,只是class method visibility in PHP OOP
声明为public的类成员可以随处访问。声明受保护的成员只能在类本身以及继承和父类中访问。声明为私有的成员只能由定义成员的类访问。
答案 2 :(得分:2)
他们的意思是他们受到不同方式的保护......
没有什么能阻止其他程序员打开类文件并更改访问修饰符。
隐藏数据是一件好事,因为您暴露的越少,您可以控制的越多,可能引入的错误就越少。