我想知道如何在一个“静态”类中使用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;在静态方法中调用非静态函数?
谢谢!
答案 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,因为没有实例