Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
-9 / 8 / 3
Регистрация: 17.02.2021
Сообщений: 239

Когда нужно распаковывать массив для использования буфризации?

21.09.2021, 18:53. Показов 777. Ответов 7
Метки php8 (Все метки)

Студворк — интернет-сервис помощи студентам
PHP
1
2
3
4
5
6
7
8
9
10
11
12
private function renderOnly(string $file): bool|string
{
    ob_start();
 
    if (is_array($this->vars)) {
        extract($this->vars);
    }
 
    include $file;
 
    return ob_get_clean();
}
либо так

PHP
1
2
3
4
5
6
7
8
9
10
11
12
private function renderOnly(string $file): bool|string
{
    if (is_array($this->vars)) {
        extract($this->vars);
    }
 
    ob_start();
 
    include $file;
 
    return ob_get_clean();
}
Дело в том, что работает и так и так, НО я-то по чесноку думал, что надо делать, как в первом варике, потому что по логике ведь мы что-то в буфер пихаем, почему в буфер залетает и то, что распаковано до его открытия?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.09.2021, 18:53
Ответы с готовыми решениями:

Когда нужно ставить скобки для функций, а когда нет
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet"...

Удалённые хуки. Когда для них нужно создавать *.dll, а когда необязательно?
Друзья! В туториалах Iczelion'а сказано просто: То тут то там вижу утверждения, что *.dll создавать необязательно, типа и так...

Когда нужно использовать структуры, когда классы, а когда словарь?
Хеллоу. Не могу понять, когда, что, нужно использовать. Допустим мне нужно получить объект, который имеет список объектов. И...

7
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
21.09.2021, 19:30
В буфер сохраняется вывод, а не переменные.
1
-9 / 8 / 3
Регистрация: 17.02.2021
Сообщений: 239
21.09.2021, 19:43  [ТС]
Lazy_Den, ничего не понял, но спасибо

в таком случае почему не работает так?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private function renderOnly(string $file): bool|string
{
    ob_start();
 
    include $file;
 
    return ob_get_clean();
}
 
//
 
if (is_array($this->vars)) {
    extract($this->vars);
}
 
$this->renderOnly(/* что-то*/);
вы скажете, что распаковка произведена до вызова метода, поэтому не попадает в буфер ну так внутри метода, если я распакую до вызова функции буфера, то все залетает в буфер

Добавлено через 3 минуты
Lazy_Den, то есть вот так рассуждаю я

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private function renderOnly(string $file): bool|string
{
    if (is_array($this->vars)) {
        extract($this->vars);
    }
 
    { // в буфер попадёт только то, что внутри этого блока
        ob_start();
 
        /* if (is_array($this->vars)) {
            extract($this->vars);
        } */
 
        include $file;
 
        return ob_get_clean();
    }
}
Добавлено через 2 минуты
Lazy_Den, получается что

PHP
1
2
3
4
5
6
7
8
// тут у нас куча хренова кода
 
ob_start();
 
// тут у нас в буфер попадает все что находится в хреновой куче кода
 
 
// ну и так далее работаем с буфером
так?
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
21.09.2021, 19:51
Цитата Сообщение от DefenseMinister Посмотреть сообщение
в таком случае почему не работает так?
Надеюсь, что понятие "область видимости" вам знакомо? )

Цитата Сообщение от DefenseMinister Посмотреть сообщение
ничего не понял
Давайте определим простым языком. Всё, что отдаётся в скриптах для вывода в браузер. Например, самые очевидные способы: с помощью конструкции echo, print_r и т.д. Это же относится и к подключаемым файлам
0
-9 / 8 / 3
Регистрация: 17.02.2021
Сообщений: 239
21.09.2021, 20:02  [ТС]
Цитата Сообщение от Lazy_Den Посмотреть сообщение
Надеюсь, что понятие "область видимости" вам знакомо? )
а я ждал такого комментария

рассмотрим такой вариант

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class View
{
    // тут что-то
 
    public function render(string $view, ?array $vars = null): void
    {
        $layout = "app/views/layouts/$this->layout/main.php";
        $view = "app/views/$this->folder/$view.php";
 
        if (is_array($vars)) {
            extract($vars);
        }
 
        echo str_replace('{content}', $this->renderOnly($view), $this->renderOnly($layout));
    }
 
    private function renderOnly(string $file): bool|string
    {
        ob_start();
 
        include $file;
 
        return ob_get_clean();
    }
}
не попадают распакованные переменные в инклуд буфера

ну и в какой области видимости находятся методы render() и renderOnly()

0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
21.09.2021, 22:28
Цитата Сообщение от DefenseMinister Посмотреть сообщение
не попадают распакованные переменные в инклуд буфер
Я бы очень удивился, если бы попали. Переменные остались в области видимости метода render(), а метод renderOnly() о них малейшего понятия не имеет.

Цитата Сообщение от DefenseMinister Посмотреть сообщение
ну и в какой области видимости находятся методы render() и renderOnly()
Вы или неправильно вопрос задаёте, или же по незнанию пытаетесь смешать всё в кучу.
0
-9 / 8 / 3
Регистрация: 17.02.2021
Сообщений: 239
21.09.2021, 23:29  [ТС]
Lazy_Den, ну так а какая область видимости функции ob_start()? То есть какая область видимости БУФЕРА?

Добавлено через 1 минуту
Lazy_Den, я если сделаю ob_start(); $app->run(); то куда залетит вся приложуха у меня?

Добавлено через 1 минуту
Lazy_Den, а если я массив в конструкторе класса присвою свойству, которое видно везде в классе и распакую в конструкторе, то куда подевались распакованные данные

Добавлено через 5 минут
Цитата Сообщение от Lazy_Den Посмотреть сообщение
Переменные остались в области видимости метода render(), а метод renderOnly() о них малейшего понятия не имеет.
ну я думал оба этих метода в области видимости класса находятся
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
22.09.2021, 10:17
Цитата Сообщение от DefenseMinister Посмотреть сообщение
почему в буфер залетает и то, что распаковано до его открытия?
Буфер сохраняет то, что вы пытаетесь вывести на экран. То что вы при этом распаковываете какие-то переменные и подключаете какие-то файлы - ему всё это фиолетово.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.09.2021, 10:17
Помогаю со студенческими работами здесь

Когда перед ELSE не нужно ставить точку с запятой, а когда нужно?
Когда перед ELSE не нужно ставить точку с запятой, а когда нужно?

Помгите пожалуйста, нужно развернуть массив без использования reverse()
Вот код, пока дошел только до заполнения массива, дальше не пойму что делать, уже что только не пробовал, всё равно не получается,...

Почему нужно переопределять метод, для использования ?
Всем привет есть такой код : class A { private: int var; public: A() { var = 0 } int getVar() { ...

Что нужно подключить для использования capCaptureSetSetup, capFileSetCaptureFile
Што нужно подключить ишё, штоб использовать функции: capCaptureSetSetup, capFileSetCaptureFile, и т. п. Подключил Vfw.h и либу, но всьо...

Когда нужно писать скобки после функции а когда нет?
Здравствуйте.Хотел вот задать такой простенький вопрос на примере моего кода. <form> <input type="text"...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru