如何使用self和这个结合在一个静态类中?

时间:2012-03-28 11:15:35

标签: php class static this self

我想知道如何在一个“静态”类中使用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();

&GT;

我也在上面的代码中添加了问题,但是我可以在非静态方法中使用self ::并且可以使用$ this-&gt;在静态方法中调用非静态函数?

谢谢!

4 个答案:

答案 0 :(得分:2)

您可以在非静态方法中使用self,但不能在$this方法中使用static

self总是引用类,在类或对象上下文中它是相同的 $this需要一个实例。

访问静态属性的语法是self::$inIndex BTW(需要$)。

答案 1 :(得分:0)

你做不到。静态方法无法与需要类实例的方法或属性(即非静态属性/方法)进行通信。

也许您正在寻找singleton pattern

答案 2 :(得分:0)

您可以在非静态方法中使用self::$inIndex,因为您可以从非静态方法访问静态内容。

您不能在静态方法中使用$this->inIndex,因为静态方法未绑定到类的实例 - 因此$ this未在静态方法中定义。如果静态方法也是静态的,那么只能访问方法和属性。

答案 3 :(得分:0)

这可行(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,因为没有实例