3

私はジュニア PHP プログラマーです。まだまだ学ぶことがたくさんあります。だからこそ、私はこの質問をします。クラスには、そのクラスの外部から呼び出すことができるパブリック関数があります。再利用可能な目的で、プライベート関数が存在するクラスで数回呼び出すことができるプライベート関数がある場合があります。プライベート関数を静的に設定するのが好きで、その関数を次のように呼び出します。

self::privateFunctionName();

selfを使用すると、このプライベート関数がそのクラスに存在することを思い出します。非静的関数に$this->privateFunctionName()を使用すると、スーパークラス/基本クラスまたはそのサブクラス自体にある可能性があります。そのため、静的プライベート関数を使用するのが好きです。専門的な観点から、非静的ではなく静的プライベート関数を使用することは良い考えですか? あなたのようなプロのプログラマーが静的関数を避けることを好むという欠点はありますか?

4

3 に答える 3

3

使用するだけself::...では、メソッドが静的であることを意味してはなりません。非静的メソッドでも同様に機能しますparent::これはPHP マニュアル - Scope Resolution Operator (::)self::で見つけることができます。回答の最後に、例示的なコードの抜粋をいくつか追加します。

おそらく、この以前の質問のすべての回答を読みたいと思うかもしれません:

全体として、この回答の私の短い説明よりも詳細な情報が得られます。

::それらが使用するスコープ解決演算子に混乱したかもしれません。私はそれを把握するのと同様の理解の問題を抱えていました。

ただし、そのような限られた理由だけで静的メソッドを使用することを選択しないでください。これらの静的クラス メソッドは、非常に限られた狭い状況でのみ使用する必要があります。経験則として:

「静的クラス メソッドを使用しないでください。」

オブジェクト指向プログラミングから始めたい場合は、通常のオブジェクト メソッドを使用してください。

以下は、標準の (非静的) メソッドで使用されていることを示す既存のコードからの抜粋です。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;
    }

    ...
于 2014-10-09T13:12:10.833 に答える