Добрый день всем! Скажу сразу - я не мегокодырь, и не претендую на право таким быть, потому не судите строго, в этой статье выложу описание одной интересной особенности ООП PHP. Речь пойдет о автоматическом подключении футера.
Возможно ли это не нарушая логической последовательности PHP?
PHP.su о PHP 5:
PHP 5 предоставляет концепцию деструкторов, сходную с теми, что применяются в других ОО языках, таких, как Java: когда освобождается последняя ссылка на объект, перед высвобождением памяти, занимаемой этим объектом, вызывается метод __destruct(), не принимающий параметров.
Именно метод __destruct() позволит нам подключать автоматически фуутер по окончании работы скрипта.
Но нужно понимать такие нюансы как например то, что футер, желательно, должен состоять из HTML/native кода, и придется глобализировать переменные, т. к. скрипт будет выполнятся внутри метода класса(функции), чего не скажешь о моем шаблонизаторе, где можно использовать специальный расширенный натив.
А теперь конкретно к примерам:
Document.Class.php
//Создадим класс документа
class Document {
//Что будем подключать
var $file;
//Это нам нужно для правильной конструкции
function __construct($file) {
$this->file = $file;
}
//А это для правильной работы
function __destruct() {
require $this->file;
}
}
Готовый рабочий класс у нас есть. Теперь дело к сценарию:
index.php
require 'Document.Class.php';
//Регистрируем объект и аргументом ставим
//файл который будет подключен
$DOC = new Document("footer.php");
//Ну и тестовая переменная
//используем ее позже в футере
//Сдесь также может быть любой сценарий
$test_var = "Тестовая переменная";
//Если здесь ничего нету, то по логике PHP здесь выполняется метод __destruct()
//заданный нами ранее в классе.
//Представить себе что PHP сдесь выполнит можно так:
#$Document->__destruct();
//Только он (пых), допишет это сам.
Файл футера:
foter.php
global $test_var;
?>
html code
Ну вот и футер, где можно использовать натив - <?=$test_var?>
<?php //code php
В результате, объявив такой класс в любом месте скрипта, он автоматически подключит футер вконце!