Область видимости глобальной переменной PHP внутри класса - PullRequest
9 голосов
/ 13 декабря 2011

У меня есть следующий скрипт

myclass.php

<?php

$myarray = array('firstval','secondval');

class littleclass {
  private $myvalue;

  public function __construct() {
    $myvalue = "INIT!";
  }

  public function setvalue() {
    $myvalue = $myarray[0];   //ERROR: $myarray does not exist inside the class
  }
}

?>

Есть ли способ сделать $ myarray доступным внутри littleclass с помощью простого объявления?Я не хочу передавать его как параметр конструктору, если это было возможно.

Кроме того, я надеюсь, что вы действительно МОЖЕТЕ сделать глобальные переменные видимыми для класса php каким-то образом, но это мой первыйвремя, когда я столкнулся с проблемой, поэтому я действительно не знаю.

Ответы [ 5 ]

18 голосов
/ 13 декабря 2011

включает global $myarray в начале функции setvalue().

public function setvalue() {
    global $myarray;
    $myvalue = $myarray[0];
}

ОБНОВЛЕНИЕ:
Как отмечено в комментариях, это плохая практика иследует избегать.
Лучшее решение будет следующим: https://stackoverflow.com/a/17094513/3407923.

3 голосов
/ 13 декабря 2011

в классе вы можете использовать любую глобальную переменную с $GLOBALS['varName'];

1 голос
/ 13 декабря 2011

Создать новый одноэлементный класс, используемый для хранения и доступа к переменным, которые вы хотите использовать?

0 голосов
/ 13 декабря 2011

Почему бы вам не использовать для этого геттер и сеттер?

<?php

    $oLittleclass = new littleclass ;
    $oLittleclass->myarray =  array('firstval','secondval');

    echo "firstval: " . $oLittleclass->firstval . " secondval: " . $oLittleclass->secondval ;

    class littleclass 
    {
      private $myvalue ;
      private $aMyarray ;

      public function __construct() {
        $myvalue = "INIT!";
      }

      public function __set( $key, $value )
      {
        switch( $key )
        {
          case "myarray" :
            $this->aMyarray = $value ;
          break ;
        }
      }

       public function __get( $key )
       {
          switch( $key )
          {
            case "firstval" :
              return $this->aMyarray[0] ;
            break ;
            case "secondval" :
              return $this->aMyarray[1] ;
            break ;
          }    
       }   
    }

    ?>
0 голосов
/ 13 декабря 2011
 $GLOBALS['myarray'] =  array('firstval','secondval');

В классе вы просто можете использовать $ GLOBALS ['myarray'].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...