Php 这类函数背后的推理?
以面向对象的方式学习PHP,我经常遇到这样的人Php 这类函数背后的推理?,php,oop,Php,Oop,以面向对象的方式学习PHP,我经常遇到这样的人 public function getUsername() { return $this->username; } 这背后有什么安全理由吗?而不是直接调用类的username属性?为什么要围绕函数获取属性 这种类型的函数用于访问私有或受保护类成员。您不能直接在类的外部访问它们,因为它们只能在类的内部访问。那么,如果您想访问private成员,您会怎么做?答案是这样的 让我们举一个例子- class A {
public function getUsername() {
return $this->username;
}
这背后有什么安全理由吗?而不是直接调用类的username属性?为什么要围绕函数获取属性 这种类型的
函数
用于访问私有
或受保护
类成员。您不能直接在类的外部访问它们,因为它们只能在类的内部访问。那么,如果您想访问private
成员,您会怎么做?答案是这样的
让我们举一个例子-
class A {
private $x;
public $y;
public function test() {
echo $this->x;
}
}
$obj = new A();
$obj->x; // Error : You can not access private data outside the class
$obj->y; // Its fine
$obj->test(); // it will print the value of $x
Hope this will help.
在OOP中,类应该隐藏其实现细节,只提供必要的公共函数。用户更关心功能而不是细节。例如,您有类测试。您使用的是对属性的直接访问,您有100个位置,如$obj->date='now'等
class Test {
public $date;
}
但若在更新值或修改输入值之前需要插入一些代码,那个该怎么办呢?在这种情况下,您必须找到该属性的所有用法并对其进行更新。但是如果您要使用getter/setter,您可以在其中插入一些代码
class Test {
private $date;
public getDate() { return $this->date; }
public setDate($date) {
// here some modification value or something else
$this->date = $date;
}
}
一个简单的原因是您正在编写一段代码,并且希望防止用户覆盖对象实例中的值(配置数据就是一个很好的例子)
以您所述的方式编写函数还提供了一个标准接口,这在开发复杂程序时是必不可少的。若有一个开发团队只使用一个类,而不定义对变量的访问,那个就太疯狂了
下面是对PHP OOP基础知识的一个很好的解释,并解释了private
、public
和protected
我想看看你想如何在没有该方法的情况下从类外访问私有属性。尝试学习