Функции Язык программирования PHP

SWFbutton

(PHP 4 >= 4.0.5)

SWFbutton - создаёт новую кнопку/Button.

Описание

new swfbutton (void)

Предупреждение!

Эта функция - ЭКСПЕРИМЕНТАЛЬНАЯ. Поведение, имя и всё остальное, что задокументировано для данной функции может быть изменено в будущих релизах РНР без предупреждения. Вы можете использовать эту функцию только на свой страх и риск.

swfbutton() создаёт новую Button. Перекатывает её, щёлкает, смотрит её код акции. Шикарно.

SWFButton имеет следующие методы: swfbutton->addshape(), swfbutton->setup(), swfbutton->setover(), swfbutton->setdown(), swfbutton->sethit(), swfbutton->setaction() и swfbutton->addaction().

В примере показано ваше обычное взаимодействие с кнопками: rollover, rollon, mouseup, mousedown, noaction.
Пример 1. swfbutton()
<?php 
$f = new SWFFont("_serif"); $p = new SWFSprite(); function label($string) { global 
$f; $t = new SWFTextField(); $t->setFont($f); $t->addString($string); 
$t->setHeight(200); $t->setBounds(3200,200); return $t; } function addLabel($string) 
{ global $p; $i = $p->add(label($string)); $p->nextFrame(); $p->remove($i); 
} $p->add(new SWFAction("stop();")); addLabel("NO ACTION"); addLabel("SWFBUTTON_MOUSEUP"); 
addLabel("SWFBUTTON_MOUSEDOWN"); addLabel("SWFBUTTON_MOUSEOVER"); addLabel("SWFBUTTON_MOUSEOUT"); 
addLabel("SWFBUTTON_MOUSEUPOUTSIDE"); addLabel("SWFBUTTON_DRAGOVER"); addLabel("SWFBUTTON_DRAGOUT"); 
function rect($r, $g, $b) { $s = new SWFShape(); $s->setRightFill($s->addFill($r, 
$g, $b)); $s->drawLine(600,0); $s->drawLine(0,600); $s->drawLine(-600,0); 
$s->drawLine(0,-600); return $s; } $b = new SWFButton(); $b->addShape(rect(0xff, 
0, 0), SWFBUTTON_UP | SWFBUTTON_HIT); $b->addShape(rect(0, 0xff, 0), SWFBUTTON_OVER); 
$b->addShape(rect(0, 0, 0xff), SWFBUTTON_DOWN); $b->addAction(new SWFAction("setTarget('/label'); 
gotoFrame(1);"), SWFBUTTON_MOUSEUP); $b->addAction(new SWFAction("setTarget('/label'); 
gotoFrame(2);"), SWFBUTTON_MOUSEDOWN); $b->addAction(new SWFAction("setTarget('/label'); 
gotoFrame(3);"), SWFBUTTON_MOUSEOVER); $b->addAction(new SWFAction("setTarget('/label'); 
gotoFrame(4);"), SWFBUTTON_MOUSEOUT); $b->addAction(new SWFAction("setTarget('/label'); 
gotoFrame(5);"), SWFBUTTON_MOUSEUPOUTSIDE); $b->addAction(new SWFAction("setTarget('/label'); 
gotoFrame(6);"), SWFBUTTON_DRAGOVER); $b->addAction(new SWFAction("setTarget('/label'); 
gotoFrame(7);"), SWFBUTTON_DRAGOUT); $m = new SWFMovie(); $m->setDimension(4000,3000); 
$i = $m->add($p); $i->setName("label"); $i->moveTo(400,1900); $i = 
$m->add($b); $i->moveTo(400,900); header('Content-type: application/x-shockwave-flash'); 
$m->output(); ?>

Следующий простой пример даёт возможность рисовать большую красную кнопку в windows. Никакого drag-and-drop, просто перемещение.
Пример 2. swfbutton->addaction()
<?php 
$s = new SWFShape(); $s->setRightFill($s->addFill(0xff, 0, 0)); $s->drawLine(1000,0); 
$s->drawLine(0,1000); $s->drawLine(-1000,0); $s->drawLine(0,-1000); 
$b = new SWFButton(); $b->addShape($s, SWFBUTTON_HIT | SWFBUTTON_UP | SWFBUTTON_DOWN 
| SWFBUTTON_OVER); $b->addAction(new SWFAction("startDrag('/test', 0);"), 
// '0' означает // не блокировать мышь SWFBUTTON_MOUSEDOWN); $b->addAction(new 
SWFAction("stopDrag();"), SWFBUTTON_MOUSEUP | SWFBUTTON_MOUSEUPOUTSIDE); $p = 
new SWFSprite(); $p->add($b); $p->nextFrame(); $m = new SWFMovie(); $i 
= $m->add($p); $i->setName('test'); $i->moveTo(1000,1000); header('Content-type: 
application/x-shockwave-flash'); $m->output(); ?>


Назад Оглавление Вперёд
SWFbutton->setUp Вверх SWFDisplayItem->addColor

Производительность

Некоторые элементы, которые могут появляться в патэрнах, работают более эффективно, чем другие. Более эффективно использовать класс символов, такой как [aeiou], нежели набор альтернатив, такой как (a|e|i|o|u). В целом, более простая конструкция является более эффективной. Книга Jeffrey Friedl'а содержит большую дискуссию об оптимизации регулярных выражений для повышения производительности.

Если патэрн начинается с .* и установлена опция PCRE_DOTALL, патэрн неявно заякоривается PCRE, поскольку он может совпасть только в начале строки-субъекта. Однако, если PCRE_DOTALL не установлена, PCRE не может выполнить эту оптимизацию, поскольку метасимвол . не совпадает тогда с символом новой строки/newline, и, если строку-субъект содержит newlines, патэрн может совпасть с символом, идущим непосредственно после одного из символов новой строки, вместо того чтобы совпадать только в самом начале. Например, патэрн

(.*) second

совпадает в субъекте "first\nand second" (где \n это символ новой строки) с первой захваченной подстрокой "and". Для этого PCRE пытается совпадать в начале после каждого символа новой строки в субъекте.

Если вы используете такой патэрн со строками-субъектами, которые не содержат newlines, наилучшая производительность будет достигнута установкой PCRE_DOTALL, или если начать патэрн с ^.* для явного указания заякоривания. Это удержит PCRE от необходимости сканировать субъект в поисках newline для рестарта с него.

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

(a+)*