只使用self::...
不能意味着方法是静态的。parent::
并且self::
适用于非静态方法。您可以在PHP 手册 - 范围解析运算符 (::)中找到它,我在答案末尾添加了一些示例性代码摘录。
您可能想通读这个早期问题的所有答案:
总的来说,您将获得更多详细信息,然后是我在此答案中的简短描述。
您可能对::
那些使用的范围解析运算符感到困惑。我在理解这一点时遇到了类似的理解问题。
但是,不要仅仅出于这种有限的原因而选择使用静态方法。那些静态类方法应该只在非常有限和狭窄的情况下使用。根据经验:
“不要使用静态类方法。”
如果您喜欢从面向对象编程开始,只需使用普通的对象方法即可。
这是现有代码的摘录,显示了标准(非静态)方法self::
以及parent::
与标准(非静态)方法一起使用的代码:
<?php
...
/**
* Class XMLElementIterator
*
* Iterate over XMLReader element nodes
*/
class XMLElementIterator extends XMLReaderIterator
{
private $index;
private $name;
private $didRewind;
/**
* @param XMLReader $reader
* @param null|string $name element name, leave empty or use '*' for all elements
*/
public function __construct(XMLReader $reader, $name = null)
{
parent::__construct($reader);
$this->setName($name);
}
/**
* @return void
*/
public function rewind()
{
parent::rewind();
$this->ensureCurrentElementState();
$this->didRewind = true;
$this->index = 0;
}
/**
* @return XMLReaderNode|null
*/
public function current()
{
$this->didRewind || self::rewind();
$this->ensureCurrentElementState();
return self::valid() ? new XMLReaderNode($this->reader) : null;
}
...