#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';
}
<?