Как использовать себя, и это объединено в статическом классе? - PullRequest
1 голос
/ 28 марта 2012

Мне было интересно, как использовать self :: и $ this вместе в "статическом" классе?

<?php
class Test
{
    static private $inIndex = 0;

    static public function getIndexPlusOne()
    {
        // Can I use $this-> here?
        $this->raiseIndexWithOne();

        return self::inIndex
    }

    private function raiseIndexWithOne()
    {
        // Can I use self:: here?
        self::inIndex++;
    }
}

echo Test::getIndexPlusOne();

?>

Я также добавил вопросы в коде выше, но могу ли я использовать self :: в нестатическом методе и могу ли я использовать $ this-> в статическом методе для вызова нестатической функции?

Спасибо!

Ответы [ 4 ]

2 голосов
/ 28 марта 2012

Вы можете использовать self в нестатическом методе, но вы не можете использовать $this в static методе.

self всегда относится к классу, который одинаков в контексте класса или объекта.
$this требует экземпляра.

Синтаксис для доступа к статическим свойствам: self::$inIndex BTW (требуется $).

0 голосов
/ 28 марта 2012

Это будет работать (http://codepad.org/99lorvq1)

<?php
class Test
{
    static private $inIndex = 0;

    static public function getIndexPlusOne()
    {
        // Can I use $this-> here?
        self::raiseIndexWithOne();

        return self::$inIndex;
    }

    private function raiseIndexWithOne()
    {
        // Can I use self:: here?
        self::$inIndex++;
    }
}

echo Test::getIndexPlusOne();

вы не можете использовать $ this внутри статического метода, так как нет экземпляра

0 голосов
/ 28 марта 2012

Вы можете использовать self::$inIndex в нестатическом методе, потому что вы можете получить доступ к статическим объектам из нестатических методов.

Нельзя использовать $this->inIndex в статическом методе, поскольку статический метод не привязан к экземпляру класса - поэтому $ this не определено в статических методах. Вы можете получить доступ к методам и свойствам только из статического метода, если они также являются статическими.

0 голосов
/ 28 марта 2012

Вы не можете.Статический метод не может взаимодействовать с методами или свойствами, для которых требуется экземпляр класса (например, нестатические свойства / методы).

Возможно, вы ищете шаблон синглтона ?

...