2015-01-24 3 views
2

У меня есть класс (виджет yii2), который имеет частные свойства и общедоступные статические функции. Когда я пытаюсь получить доступ к частному свойству из статического метода, например $this->MyPrivateVar, возникает ошибка, связанная с тем, что мне не нужно использовать $this в контексте, не относящемся к объекту! Ниже приведен фрагмент моего кода:Как получить доступ к свойству частного класса из общедоступного статического метода в PHP

class JuiThemeSelectWidget extends Widget 
{ 
    private $list; 
    private $script; 
    private $juiThemeSelectId = 'AASDD5'; 
    public $label; 
    .... 
public static function createSelectList($items) 
    { 
    $t = $this->juiThemeSelectId; 
    ... 
    } 

Я попытался следующие, но это, кажется, что испытывает к бесконечному циклу Maximum execution time of 50 seconds exceeded!

public static function createSelectList($items) 
    { 
    $t = new JuiThemeSelectWidget; 
    $juiThemeSelectId = $t->juiThemeSelectId; 
    ... 
    } 

Так как я могу получить доступ к частному juiThemeSelectId от статического метода?

+0

Является ли '$ items' классом' Widget'? –

+0

Нет, это просто параметр, переданный методу из другого метода. @CommuSoft – SaidbakR

ответ

2

Рода Ответ: Вы не можете получить доступ к нестатический свойство в статическом методе. У вас нет доступа к $this в статическом методе.

Что вы могли бы сделать, это просто изменить свойство статике, как:

private static $juiThemeSelectId = 'AASDD5'; 

И обращаться к нему с этим:

echo self::$juiThemeSelectId; 

Для получения дополнительной информации о ключевом слове static смотрите руководство: http://php.net/manual/en/language.oop5.static.php

И цитата оттуда:

Because static methods are callable without an instance of the object created, the pseudo-variable $this is not available inside the method declared as static.

+0

Как вы сказали, я установил свойство 'private static', а затем попытался получить доступ к нему из открытого статического метода как' $ t = self :: $ juiThemeSelectId ;, но он дает error: 'Получение неизвестного свойства: common \ libs \ JuiThemeSelectWidget :: juiThemeSelectId' – SaidbakR

+1

@ sємsєм Можете ли вы, как код, который вы используете сейчас, чтобы получить эту ошибку. – Rizier123

+0

Извините, ваше решение отлично работает, я просто забыл, что я назвал его в другой строке как '$ this'. – SaidbakR

0

вы можете получить доступ к нему с помощью self:

public static function createSelectList($items) 
{ 
    $t = self::juiThemeSelectId; 
    ... 
} 
+0

При использовании 'self' при возникновении ошибки генерируется следующая ошибка:' Undefined class constant 'juiThemeSelectId'' – SaidbakR

+0

Мне жаль, я не понял, что 'juiThemeSelectId' не является' static' в вашем примере ... см. @ Rizier123 answere – bohrsty

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