Проблема с глобализацией переменных PHP

#php #oop #scope

#php #ооп #область видимости

Вопрос:

У меня есть общедоступный объект, скажем, X. определенный в файле конфигурации. Как я могу использовать этот объект в методе внутри класса. Я думаю, что когда я глобализирую X в этом методе, он выглядит внутри класса. 🙁

 include('config.php'); //the objec X is defined here
class MyClass{
 public foo(){
 global $X; // I thing It is looking within the class
 }
}
 

Комментарии:

1. Итак, вы не можете использовать $ x в методе foo() сейчас? Это локально или на веб-сервере? Работает ли это вне класса?

2. Нет, он находится в глобальной области видимости, так что вы можете использовать его в своем методе.

3. Не могли бы вы показать нам соответствующий код внутри config.php ?

Ответ №1:

Я сделал демонстрацию…Надеюсь, это то, что вы хотели.. global.php

 <?php

$x=5;

?>
 

index.php

 <?php
include('global.php');
class foo{
private $value;
function __construct(){
global $x;
    $this->value=$x;
}
function show(){
    return $this->value;
}
}
$a= new foo();
echo $a->show();
?>
 

Ответ №2:

Это работает для меня:

 class LemonSalesman {
    public function advertise() {
        echo 'Get your fresh lemons here!';
    }
}

$LemonSalesman = new LemonSalesman();

class MyObject {
    public function foo() {
        global $LemonSalesman;

        $LemonSalesman->advertise();
    }
}

$MyObject = new MyObject();
$MyObject->foo();
 

Вы уверены, что ваш объект $ X является глобальным?

Ответ №3:

Если вы определили $x в своем конфигурационном файле таким образом:

  <?php
      $x = 'somevalue';
 ?>
 

тогда использование функции global in будет работать просто отлично. В качестве альтернативы вы также можете использовать глобальный массив для доступа к переменной $GLOBALS['x'] , однако я не уверен, насколько это распространено или предлагается.

Однако, если у вас есть переменная конфигурации, определенная внутри функции или класса, тогда у нее также должна быть глобальная, например:

  <?php

      function loadConfig(){
           // no global here means that $x is not global.
           $x = 'somevalue';
      }
 <?