gpt4 book ai didi

PHP 私有(private)静态函数

转载 作者:行者123 更新时间:2023-12-05 03:14:12 28 4
gpt4 key购买 nike

我是一名初级 PHP 程序员。我还有很多东西要学。这就是我问这个问题的原因。在一个类中,您有一个公共(public)函数,您可以从该类外部调用它。有时你有一个私有(private)函数,你可以在私有(private)函数所在的类中多次调用它,以实现可重用的目的。我喜欢将私有(private)函数设置为静态,并使用以下命令调用该函数:

self::privateFunctionName();

通过使用 self 它提醒我这个私有(private)函数驻留在那个类中。如果我将 $this->privateFunctionName() 用于非静态函数,它可能在父类(super class)/基类中或在该子类本身中。这就是为什么我喜欢使用静态私有(private)函数。从专业的角度来看,使用静态私有(private)函数而不是非静态是个好主意吗?像您这样的专业程序员更喜欢避免静态函数有什么缺点吗?

最佳答案

仅使用 self::... 并不意味着该方法是静态的。 parent::self:: 也适用于非静态方法。您可以在 PHP manual - Scope Resolution Operator (::) 中找到它,我在答案末尾添加了一些示例性代码摘录。

您可能想通读前面这个问题的所有答案:

总的来说,你会得到比我在这个答案中的简短描述更多的细节。

您可能对那些使用的范围解析运算符 :: 感到困惑。我也有类似的理解问题。

但是,不要仅仅因为这样一个有限的原因而选择使用静态方法。那些静态类方法只能在非常有限和狭窄的情况下使用。根据经验:

"Do not use static class methods."

如果您喜欢从面向对象编程开始,只需使用普通的对象方法即可。

这是一个 excerpt from existing code,显示 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;
}

...

关于PHP 私有(private)静态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26278347/

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