Эта тема на forum.dklab.ru


Programmer: PHP Expert Editor - PHP Macros'ы
В PHP Expert Editor есть замечательная особенность - возможность создания PHP-макросов для использования их в редакторе. То есть, зайдя в меню [Macros]>[PHP Macros]>[New...], Вы можете создать собственную подпрограмму, используемую собственно редактором.
На макросы можно поставить комбинацию горячих клавишь. То есть, использование PHP макросов в редакторе может в некотором роде увеличить его возможности.

Для запуска таких макросов необходимо в меню [Run]>[Options...] прописать путь до php.exe (php-cgi.exe) и указать порт.

В этой теме предлагаю выкладывать ваши php-макросы.
Programmer:
В качестве примера написал макрос, позволяющий склеивать файлы. Буилдер этакий. Конечно, скрипт далек от совершенства, но основную свою функцию выполняет.
Для склеивания ваших скриптов в один Вам необходимо создать xml конфиг-файл в самом редакторе следующей структуры:

<file>
<name>классы.h</name>
<name>функции.h</name>
<name>выполнение.p</name>
</file>


Замечание: в данной версии макроса использование перевода строки в описании документа (как на примере) обязательно

Чтобы активировать макрос, выберите его в списке ([Macros]>[PHP Macros]).
Условие выполнения - конфигурационный xml-файл должен быть сохранен.

Установка макроса:
1) меню Macros>PHP Macros>New
2) задать имя макроса
3) откроется новый файл с маской для ввода макроса, все, что там введено, нам не нужно и это необходимо удалить(Ctrl+A > Del)
4) копируем следующий код и cохраняем файл
5) теперь макрос доступен в списке php-макросов (по необходимости можно задать комбинацию клавишь)

<?php

define("BUILD_FILE", "Build.php");

class Properties {
static public function isSaved() {
return $_SERVER["FileSaved"] == 1 ? true : false;
}
static public function message($message) {
$_SERVER["Message"] = $message;
}
static public function fileName() {
return $_SERVER["FileName"];
}
static public function getPas() {
return dirname(Properties::FileName()) . DIRECTORY_SEPARATOR;
}
}
class BuilderException extends Exception {
protected $message;

public function __construct($message) {
$this->message = $message;
}
}
class Xml {
private $dom;
public function __construct() {
$this->dom = new domDocument();
$this->dom->load(Properties::FileName());
}
private function getNodes() {
return $this->dom->childNodes->item(0);
}
public function files() {
$dom = $this->getNodes();
$descr = array();
if($dom->nodeType == XML_ELEMENT_NODE) {
$descr[$dom->nodeName] = $dom->nodeValue;
}
return $descr;
}
}
class Builder {
private $bx;
public function __construct() {
if(!Properties::isSaved()) {
throw new BuilderException("File is not saved");
}
$this->build($this->readFiles($this->getXml()));
}
private function getXml() {
$xml = new Xml();
$a = $xml->files();
return explode(chr(10), trim($a["file"]));
}
private function readFiles($files) {
$s = "";
foreach($files as $f) {
$s .= file_get_contents(Properties::getPas() . $f);
}
return $s;
}
private function build($s) {
if(file_exists(Properties::getPas() . BUILD_FILE)) {
throw new BuilderException("Build file is exists");
}
file_put_contents(Properties::getPas() . BUILD_FILE, $s);
}
}

try {
$b = new Builder();
} catch(BuilderException $x) {
Properties::message($x->getMessage());
}
Properties::message("Build file (" . BUILD_FILE . ") created");

while(list($var, $value) = each($_SERVER)) {
print($var . chr(61) . $value . chr(27));
}

?>

Послесловие.
Данный код - халтура. Написан за 30 минут. Но если сама идея подобного билдера не будет воспринята негативно, то я смогу начать разработку более сложного и гибкого механизма.
Впринципе, билдер дает следующие приемущества:
- возможность разработывать функции, классы отдельно (если функции и имеют "глобальную видемость", то создавать объект можно только после описания класса, а при 1000 и более строк кода прокатывать в конец файла, где находится строка теста как-то неочень...)
- при подключении большого количества файлов не во время выполнения оптимизирует скрипт и скидывает время выполнения от 0.010 до 0.100 и т.д.

Эта тема на forum.dklab.ru