gpt4 book ai didi

php - 在 php 类中使用未定义的属性

转载 作者:可可西里 更新时间:2023-11-01 13:42:26 28 4
gpt4 key购买 nike

<?php
class a{
public function out(){
$this->test = 8;
return $this->test;
}
}
$b = new a();
echo $b->out();
?>

output: 8

当我运行这段代码时,输​​出结果 8 。

但是当我添加 __set() 函数时,它输出一个通知,而不是 8 输出

<?php
class a{
public function __set($property, $value) {
}
public function out(){
$this->test = 8;
return $this->test;
}
}
$b = new a();
echo $b->out();
?>

输出:

PHP Notice: Undefined property: a::$test in /usercode/file.php on line 13

为什么会这样?

最佳答案

根据 docs

__set() is run when writing data to inaccessible properties.

由于您的 __set 主体中没有任何内容,因此不会创建该属性,因此不可用。您必须定义方法体。

class a{
public function __set($property, $value) {
$this->$property = $value;
}
public function out(){
$this->test = 8;
return $this->test;
}
}
$b = new a();
echo $b->out();

现在输出 8

更新您在问为什么第一段代码有效而第二段代码无效。看看 PHP source code here您将在代码本身中看到解释。​​

在我看来,当你在你的类中没有 __set() 而你做 $this->test 时,PHP 在内部调用它自己的 __set(),它的作用完全相同:将属性名称设置为特定值

但是当你用空体定义 __set() 时,它会覆盖默认的内部 __set() 并且什么都不做。这是您的代码失败的主要原因 - 您的 __set() 和内部属性均未设置请求的属性。

关于php - 在 php 类中使用未定义的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48439377/

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