2012-03-28 3 views
1

Мне было интересно, как использовать 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(); 

?>

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

Спасибо!

ответ

2

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

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

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

0

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

Возможно, вы ищете singleton pattern?

+0

стоит упомянуть: синглтон рассматривается как анти-модель в настоящее время. – KingCrunch

+0

Я все еще сомневаюсь в том, должен ли я использовать шаблон singleton или статический класс для моего класса базы данных. Синглтон выглядит лучше, но у вас может быть только 1. С учетом того, что в будущем мне придется перенести мою базу данных, мне бы хотелось иметь 2 экземпляра, а затем статический класс был бы лучше. Рядом с этим статический класс быстрее, чем одноэлементный шаблон, если я вижу тесты на большой WWW. – pascalvgemert

+0

@pascalvgemert - Если вы хотите более одного экземпляра, чего вы пытаетесь достичь с помощью статических методов и свойств? Это «за класс», а не «за экземпляр». –

0

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

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

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(); 

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

+0

Спасибо, просто хочу, мне нужно! – pascalvgemert

Смежные вопросы