подключение файла в функции, не видит переменной

259
14 марта 2017, 16:22

Использую ооп.

Есть такой класс

class Users extends BaseController{
public function getUser( $u_id ){
    $this->a = 12;
    $a = 13;
    if( !$u_id ){
        return $this->getPage404();// 33 строка
    }
}

Функция getPage404();

class BaseController{
    public function getPage404( $u_id ){
        include '/404.php';
    }
}

Вот когда я пытаюсь подключить файл если некорректный ид юзера

return $this->getPage404();

Я в файле 404.php пытаюсь вывести

echo $a;// NULL
echo $this->a;// 12

Но, если я подключаю файл на 33й строке не через функцию, а напрямую через include:

if( !$u_id ){
    return include '/404.php';// 33 строка
}

В таком случае, в файле 404.php у меня выводит нормально все

 echo $a;// 13
    echo $this->a;// 12

Вопрос. При подключении через функцию "getPage404", у меня получается для файла 404.php область видимости метода getPage404?

Answer 1

Вы возвращаете функцию return $this->getPage404();

А на прямую вы возвращаете содержимое файла return $this->getPage404();

public function getPage404( $u_id ){
        return include '/404.php';
    }
Answer 2

Понял в чем беда. Из документации

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

На момент подключения файла, в функции нет переменной $a, так как эта переменная была объявлена в другой функции.

2 варианта решения

  1. Передавать параметрами в функцию(метод) переменные.
  2. Через $this->a = 15;
READ ALSO
preg_match_all и данные в $matches?

preg_match_all и данные в $matches?

Пишу систему роутеров, есть такой код (проверка url):

205
PHP: выводит в строке “\'” вместо “'”

PHP: выводит в строке “\'” вместо “'”

ЗдравствуйтеПомогите разобраться, пожалуйста

184
Работа с функциями

Работа с функциями

Есть функция удаления динамических компонентов:

193
Android-уведомление на Qt

Android-уведомление на Qt

Здравствуйте! Пишу небольшое приложение на Qt для андроидИ интересно стало, как присылать пользователю уведомления? Например: "Уже 8 часов...

389