2015-04-17 2 views
0

В настоящее время я немного запутался со статическими и сеттерами/Getters ins php.Call setter и getter из статического метода

Мой код выглядит следующим образом:

class Test{ 

private static $name; 

    public static function setName($value){ 
    self::$name = $value //Works fine 
    } 

    public static function getName(){ 
    return self::$name; 
    } 

    function something(){ 
     self:: setName('nameOne'); 
    } 

    public static function dostuff(){ 
     $test = self::getName(); //var_dump returns NULL 
    } 
} 

Как я могу получить значение $name внутри функции dostuff, который должен быть статическим?

+1

Что вопрос? –

+0

Недопустимая функция 'something()'. Вы не можете использовать '$ this-> setName()' вы должны использовать 'self :: SetName()'. Чтобы получить значение в 'dostuff()' просто назовите его как '$ myname = self :: $ name' – Daan

+0

Вы можете использовать' self' для ссылки на свойства класса. Поэтому в вашем случае это будет: 'self :: name'. Также вы не можете «$ this» в статическом контексте. – Andrew

ответ

0

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

public static function dostuff(){ 
     return "<p>Hello!, My name is:" . self::$name . "</p>"; 
    } 

И я предлагаю удаление:

function something(){ 
     $this-> setName('test'); 
    } 

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

3

вы можете получить к нему доступ с помощью self::getName().
, кстати, что something методы выглядит не так, он должен быть self::setName('test') insteed из $this->setName('test')

EDIT: как вы называете ваши методы?
somthing() не является статичным, так что вы должны сделать объект с ним, а затем вызвать dostuff() статический
также ваши something() методов должны быть public, в противном случае он не будет частью класса!
попробовать это:

$myTest = new Test(); 
$myTest->something(); 
Test::dostuff(); 

этот код отлично работает для меня:

<?php 
class Test{ 

    private static $name; 

    public static function setName($value){ 
    self::$name = $value; //Works fine 
    } 

    public static function getName(){ 
    return self::$name; 
    } 

    public function something(){ 
     self::setName('nameOne'); 
    } 

    public static function dostuff(){ 
     $test = self::getName(); //var_dump returns NULL 
     echo $test."\n"; 
    } 
} 

$myTest = new Test(); 
$myTest->something(); 
Test::dostuff(); 
?> 
+0

HI! Спасибо за ваш ответ, но я не могу заставить его работать. Этот код фактически используется для плагина wordpress, который я разрабатываю. Итак, класс Test вызывается при настройке. setName() вызывается на определенном крючке, где переменная $ name заполняется содержимым, и должно быть доступно для различных функций: Проблема в том, что функция something() также вызывается на конкретном крючке, что означает, что я не могу использовать Test :: dostuff(). Кроме того, единственной функцией, которая должна быть статичной, является dostuff(), потому что крючок требует этого. У меня нет идей, кто может помочь? – ibsof

+0

Сложный для понимания ... вы можете отредактировать свой вопрос, чтобы он дал понять (где вы можете добавить разрывы строк и теги кода. Трудно понять временную линию ваших событий. Можете ли вы попытаться объяснить это, пожалуйста? также не понимаю, почему вы не смогли бы вызвать Test :: dostuff() ... он должен быть доступен везде, даже если другой фрагмент кода использует объект класса Test ... – Random

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