2014-02-14 3 views
0

Простой вопрос: можно ли получить доступ к статической переменной из вызова $this->?Доступ к статической переменной из класса

class testA 
{ 
    public static $var1 = "random string"; 

    // current solution 
    public function getVar() 
    { 
     return self::$var1; 
    } 
} 

class testB 
{ 
    private $myObject; 

    public function __construct() { 
     $this->myObject = new testA(); 

     // This line is the question 
     echo $this->myObject::var1; 

     // current solution 
     echo $this->myObject->getVar(); 
    } 
} 

Боюсь, я ответил на свой вопрос. Но имея несколько статических переменных, я не хотел иметь функцию для каждой переменной, или даже один getVar($staticVar), когда я мог бы получить к нему доступ напрямую.

Если это единственное решение. Любые рекомендации по лучшему способу реализации этого.

Если мне потребуется вызов функции для каждого из них, я мог бы полностью избавиться от статических переменных.

//method 
public function staticVar1() { 
    return (string) 'random string'; 
} 
+0

'testA :: var1' ... – Passerby

+0

Да, это правильно. Кажется, мне нужно уйти с компьютера на час. Сделайте перерыв :) – Bradmage

ответ

1

Вы просто получить доступ к переменной, как это:

testA::$var1; 

Таким образом, используя свой Exemple, было бы

class testB 
{ 
    private $myObject; 

    public function __construct() { 
     $this->myObject = new testA(); 

     // This line is the question 
     echo testA::$var1; 

     // current solution 
     echo $this->myObject->getVar(); 
    } 
} 
+0

О да, дух. Что-то, возможно, я мог бы ответить, если бы кто-то еще задал вопрос. Поговорите об этом. Благодарю. – Bradmage

+0

Это случается со всеми ^^ – Hipny

1

Постарайтесь понять цель статичным.

статические делают их доступными без необходимости создания экземпляра класса.

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

self::$var1; 

ниже возможно в вашем случае

testA::$var1; 

бы сделать работу здесь.

+0

Спасибо, но 'self :: $ var1;' неверно, поскольку к нему обращаются вне класса. Однако вы обновили свой ответ, поскольку я комментировал это. 'testA :: $ var1;' сделал бы трюк. – Bradmage

+0

Я упомянул оба сценария, чтобы вы могли получить представление об этом – Techie

+1

Да, я ценю это для кого-то другого с тем же вопросом. Это был просто мертвый момент мозга. Как было сказано ранее. Так или иначе, вы все равно проголосовали за это :) – Bradmage

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