2017-02-17 5 views
-1

У меня есть этот код в PHP:Изменение значения переменной только внутри функции

class PhpClass { 
    private static $name = 'Test name'; 
    private static $access = 'Test access'; 

    public static function checkData($param=NULL) { 
     if ($param) { 
      self::$name = $param['name']; 
      self::$access = $param['access']; 
     } 

     //Rest of the function 
    } 
} 

Таким образом, в основном то, что мне нужно будет держать вар $name и $access всегда иметь каждый раз значение по умолчанию я называю функцию checkData(), но только изменяя его значение в этой функции при передаче параметров.

Например, если вызвать функцию так:

function functionToCheckData() { 
    $class = new PhpClass(); 

    $param = [ 
     'name' => 'Another name', 
     'access' => 'Another access' 
    ]; 

    $class->checkData($param); //$name and $access should be "another name" and "another access" 
    $class->checkData(); //$name and $access should be "test name" and "test access" 
} 

Everytime я вызываю функцию checkData() Я хочу переменные имеют значение по умолчанию. Можно ли достичь?

ответ

1

Вы не используете static прямо здесь. Читайте о статическом here.

Что вам нужно сделать:

class PhpClass { 
    private $name = 'Test name'; 
    private $access = 'Test access'; 

    public static function checkData($param=NULL) { 
     if ($param) { 
      $this->name = $param['name']; 
      $this->access = $param['access']; 
     } else { 
      $this->name = 'Test name'; 
      $this->access = 'Test access'; 
     } 

     //Rest of the function 
    } 
} 
+0

Я попробовал это, и он возвращает эту ошибку: 'Использование $ это, когда не в объекте context'. Кроме того, необходимо ли использовать часть 'else'? Кажется излишним переопределить значение, которое уже является значением по умолчанию. Это то, чего я пытался избежать. – celsomtrindade

+0

Я только что протестировал его, он отлично работает. Убедитесь, что вы скопировали его правильно. Вы должны сказать, что использовать, если '$ param' не установлен. Если вы хотите, чтобы изменения были временными, тогда объявляйте '$ name' и' $ access' в качестве локальных переменных в 'checkData'. – zed

0

Вы используете тот же объект. так что он перепишет его.

Попробуйте это:

<?php 
    class PhpClass { 
    private $name = 'Test name'; 
    private $access = 'Test access'; 

    public function checkData($param=NULL) { 
     if ($param) { 
      $this->name = $param['name']; 
      $this->access = $param['access']; 
     } 
     echo $this->name."<br>"; 
     //Rest of the function 
    } 
} 
function functionToCheckData() { 
    $class = new PhpClass(); 

    $param = [ 
     'name' => 'Another name', 
     'access' => 'Another access' 
    ]; 

    $class->checkData($param); //$name and $access should be "another name" and "another access" 
    $class1 = new PhpClass(); 
    $class1->checkData(); //$name and $access should be "test name" and "test access" 
} 
functionToCheckData(); 
Смежные вопросы