Аргерих Л. О языке РНР. Часть 4. Страница 129


Уничтожение

Этот шаг происходит при уничтожении графического элемента, обычно в хо­де процедуры закрытия. Все необходимые здесь действия выполняются са­мим PHP-GTK. Однако важно создать связь с сигналом для того, чтобы ини­циировать закрытие и включить статический метод gtk: :main_quit() в функ­цию закрытия:

$window->connect('destroy', 'myShutdownRoutine');

Пример Hello World

Вот и он — вездесущий пример Hello World. В данном случае это не просто вывод на консоль. Мы создадим окно с кнопкой Hello World! и всплывающей подсказкой, объясняющей действие кнопки. При нажатии кнопки прило­жение выводит Hello to rid! в окно сеанса DOS или консоли, из которой было запущено, и закрывается.

Оператор if проверяет, под какой операционной системой мы запустили PHP-GTK. Это достигается сравнением строки «WIN» с первыми тремя сим­волами значения переменной $PHP_OS. В зависимости от результата функция dlC > загружает в память соответствующий модуль:

<?php

dl('php_gtk.' . (strstr($PHP_0S, 'WIN')? "dll' : 'so')) || die("Unable to load PHP-GTK module\n");

Функция quitRoutineQ вызывается при разрушении окна. Это происходит независимо от способа разрушения. Событие удаления (генерируемое при закрытии пользователем GtkWindowc помощью кнопки X в правом верхнем уг­лу окна) генерирует который внутренне обрабатывает метод de- stroy(). По умолчанию gtk: :main_quit О является статическим методом, оста­навливающим основной цикл:

function quitRoutirie($window)

{

gtk::main_quit();

}

Функция вызывается при щелчке по кнопке. Она просто выводит

Hello World! на консоль, а затем уничтожает окно. Обратите внимание, что второй параметр функции обратного вызова - $window - это пользователь­ский параметр, переданный из соединения, вызванного из объекта $button, причем вызывающий объект обеспечивает первый параметр, когда исполь­зуется метод connect(). Если бы он не был передан как параметр обратного вызова, то мы могли бы объявить $window в качестве глобальной переменной в функции hello():

function hello($button, $window) {

print "Hello World! \n"; $window->destroy();

)

Следующие несколько строк настраивают окно. Первая строка в этом блоке устанавливает $windowKaK вновь созданный экземпляр GtkWindow. В большин­стве случаев в PHP-GTK надо использовать &new, а не просто new - из-за спо­соба работы с объектами, реализованного в Zend Engine. В следующей стро­ке из нашего окна вызывается метод устанавливающий ширину рамки равной 10 пикселам. В следующей строке сигнал окна de­stroy' связывается с функцией oбpaбoтчикacигнaлaqu i t R out i n e О: