получить доступ к полуглобальной переменной из требуемой функции в PHP - PullRequest
0 голосов
/ 03 апреля 2012

Я не могу понять, как правильно сформулировать это слово, но, надеюсь, этого кода будет достаточно:

// a.php
function func_req($f) {
    // I know there are issues with paths, ignore.
    require_once $f;
}


// b.php
$myvar = "my variable!!!";
function myfunc() {
    // get myvar somehow
    return $myvar;
}

// client_code.php
require_once 'a.php';
func_req('b.php');
isset($myvar); // should return FALSE
myfunc(); // should return "my variable!!!"

Можно ли изменить какой-либо раздел кода для получения желаемых результатов?


Со значением client_code.php, измененным на следующее:

  1 <?php
  2 require_once 'a.php';
  3 func_req('b.php');
  4 echo isset($myvar) ? 'TRUE' : 'FALSE'; // should return FALSE
  5 echo myfunc() ?: 'undefined'; // should return "my variable!!!"

и добавлено глобальное объявление к отпечаткам myfunc(), php client_code.php:

FALSEundefined

Ответы [ 4 ]

1 голос
/ 03 апреля 2012
$myvar = "my variable!!!";
function myfunc() {
    global $myvar;
    // get myvar somehow
    return $myvar;
}

$ myvar не входит в сферу применения метода myfunc (), вы можете сделать его глобальным (что неприятно) или передать его в качестве параметра функции.

0 голосов
/ 03 апреля 2012

Нельзя иметь переменные, приватные для функций.Вы можете использовать класс:

<?php
class Test {
    static private $myvar = "my variable";

    static public function myfunc() {
        return self::$myvar;
    }
}

var_dump(isset(Test::$myvar));
var_dump(Test::myfunc());
?>

Живой пример

0 голосов
/ 03 апреля 2012

AFAIK В PHP нет области видимости файлов.

Вы можете либо использовать Пространства имен (которые, на мой взгляд, действительно ужасны в PHP), либо использовать Классы.Может быть, объект конфигурации соответствует вашим потребностям?

0 голосов
/ 03 апреля 2012

Чтобы сделать переменную доступной внутри функции, вы должны сделать что-то вроде:

$myvar = "my variable!!!";
function myfunc() {
    global $myvar; //allows the function to use the variable.
    //carry out any processing as necessary.
    return $myvar;
}

Однако глобалов следует избегать в максимально возможной степени. Правильный путь, конечно, будет:

$myvar = "my variable!!!";
function myfunc(myvar) {
    //carry out any processing as necessary.
    return $myvar;
}

Причина, по которой глобалы не одобряются, заключается в легкости потери отслеживания изменений, вносимых в переменную. Это, в свою очередь, затрудняет поддержку кода.

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