gpt4 book ai didi

php __get() 和 __set() 魔术的要点

转载 作者:可可西里 更新时间:2023-11-01 00:53:42 25 4
gpt4 key购买 nike

PHP 5 引入了魔术方法 __get() 和 __set()。根据我的理解,这是必须编写每个成员的 getter 和 setter 的捷径;

 <?php
class Person {
private $firstname;
private $lastname;

function __set($var, $name) {
$this->$var = $name;
}

function __get($var) {
return $this->$var;
}
}

$person = new Person();
$person->firstname = "Tom";
$person->lastname = "Brady";


echo $person->firstname . " " . $person->lastname;

// print: Tom Brady
?>

我的问题是,这就像公开成员变量一样。

class Person {
public $firstname;
public $lastname;
}

这不是违反 OOP 原则吗?这有什么意义呢?

最佳答案

在您的示例中,这与公开它们是一回事。但是,您的 __set 和 __get 函数不必处理所有变量。 (可能使用 switch 语句来决定要处理的对象。)此外,您可以对 __set 的参数执行数据验证或计算根本不存在的 __get 的返回值。

刚刚注意到您在代码中使用的是 $this->var 而不是 $this->$var(我认为您希望代码能够正常工作)

关于php __get() 和 __set() 魔术的要点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1610153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com