gpt4 book ai didi

php - 在不使用 $this-> 的情况下调用 protected 属性

转载 作者:搜寻专家 更新时间:2023-10-31 20:35:17 25 4
gpt4 key购买 nike

我正在阅读一本关于在 PHP 中创建 MVC 框架的书。在第二章中,我们构建了一个有点奇怪的类。让我用一个例子来解释。

该类称为 Inspector。以下是属性:

protected $_class;
protected $_properties = array();
protected $_methods = array();

protected $_meta = array(
"class" => array(),
"properties" => array(),
"methods" => array()
);

如您所见,它们都被声明为 protected 。

但是现在,这是该类的众多方法之一:

public function getClassMethods()
{
if (!isset($_methods))
{
$methods = $this->_getClassMethods();
foreach ($methods as $method)
{
$_methods[] = $method->getName();
}
}
return $_properties;
}

_getClassMethods() 是上面几行声明的方法,但它对我们的示例并不重要。

显然,$_methods 是之前声明的属性。但为什么它前面没有 $this-> ?首先,我认为这是因为该属性被声明为 protected,但我做了一些测试以查看它是否正常工作,当然它抛出了错误。

我不敢相信错误来自这本书:作者是专业的 PHP 开发人员,我认为,他们在类中声明的几乎所有其他方法中都犯了同样的错误(?)。

那么,PHP 是否可以在不使用 $this-> 的情况下调用属性?它与 php.ini 中的配置行(或类似的东西)有关吗?也许是因为它使用的是旧版本的 PHP。

最佳答案

在您的函数中,$_methods$this->_methods 将是两个不同的变量/属性。

要访问 protected $_methods 属性,您需要使用$this->_methods。这在类的任何方法中都可用。

如果您只使用 $_methods,那么您正在创建/访问一个仅存在于该方法内部的变量,该变量将在该方法执行完毕后消失。

因此,这本书是不正确的,在您的方法中您需要使用$this->_methods$this->_properties

关于php - 在不使用 $this-> 的情况下调用 protected 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37195051/

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