Эквивалентная конструкция в PHP для `__END__` Руби или` __DATA__` Perl - PullRequest
7 голосов
/ 16 августа 2011

Я использую PHP из командной строки и пытаюсь встроить данные в файл исходного кода.Я могу сделать это в Ruby с использованием конструкции __END__ и в Perl с использованием конструкции __DATA__, но я не могу найти способ сделать это в PHP.Цель состоит в том, чтобы иметь возможность встраивать данные в файл PHP, а затем во время выполнения считывать данные в массив для обработки.Как я могу сделать это в PHP?Включение данных в отдельный файл не очень хороший вариант из-за того, как настроены данные и выполнение файла.

Ответы [ 3 ]

9 голосов
/ 16 августа 2011

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

Базовым примером будет:

<?php

// Do something boring here

$data = file_get_contents(__FILE__, FALSE, NULL, __COMPILER_HALT_OFFSET__);
$obj  = json_decode($data, TRUE);
echo $obj['message'];

__halt_compiler();
{"status":"example", "message":"hello, __halt_compiler!"}

Выход, как и следовало ожидать, составляет hello, __halt_compiler!

4 голосов
/ 16 августа 2011

Используйте конструкцию __halt_compiler():

<?php

echo 'hello!';
__halt_compiler();
echo 'bar''; this will not cause a parse error
3 голосов
/ 16 августа 2011

вы можете использовать __ halt_compiler () и вставлять данные после этой строки кода.В документации есть отличный пример.

...