Класс является ядром движка и содержит основные методы и переменные.
Ни одну из переменных устанавливать необязательно, если вы будете запускать Berry через метод b::init().
С помощью b::$path можно разделить директории на общую (например, engine) и пользовательскую (например, application). И таким образом дополнять, модифицировать или фиксить Berry не трогая основной код движка.
b::$path[] = './application';
b::init();
Кстати, можно перебить и основной путь. Только в контексте всего движка в этом нет нужды.
b::$path = array('./engine', './application');
b::init();
// или
b::$path = array('./engine');
b::init();
Все файлы в engine будут перебиты файлами из application, кроме файлов настроек и языковых файлов. И те и другие будут собраны воедино и, в случае необходимости, пользовательские данные заменят общие только частично.
Стандартный файл настроек engine/data/config/lib.mail.yaml содержит
sender: Shiny Ass <bender@example.com>
type: text/plain
Создав файл application/data/config/lib.mail.yaml и заполнив его
sender: Почтовый робот <no-reply@example.com>
and_test: Что-нибудь тестовое
Мы получим настройку для почты вида
sender: Почтовый робот <no-reply@example.com>
type: text/plain
and_test: Что-нибудь тестовое
b::$lang содержит языковой код из заголовка Accept Language, по умолчанию ru.
Возвращает номер версии движка и кодовое имя линейки.
// array([name] => Chinpoko [id] => 0.1.6)
print_r(b::version());
// 0.1.6
print_r(b::version('id'));
Подготавливает Berry к работе.
Возвращает часть УРЛа.
Предположим, есть у нас УРЛ вида http://example.com/test/44, тогда
// array([0] => http://example.com [1] => test [2] => 44)
print_r(b::q());
// http://example.com/test
print_r(b::q(0, 1));
// test
print_r(b::q(-1));
Полчает или устанавливает значение переменной (в пространство $GLOBALS).
$test = 'Test';
$array = array(
'key' => 'Value',
'arr' => array(
'sub' => 'Sub value'
),
'some.key' => 'Bla'
);
// Test
print_r(b::l('test'));
// WTF?
print_r(b::l('test', 'WTF?'));
// WTF?
print_r($test);
// Sub value
print_r(b::l('array.arr.sub'));
// Bla
print_r(b::l('array.some\.key'));
Замена count() и strlen().
// text/plain
print_r(b::config('lib.mail.type'));
Возвращает перевод строки в соответствии с текущими настройками языка. В случае, когда перевода нет, возвращается строка из набора en.
Собственно, да.
Служит для замены функций call_user_func() и call_user_func_array() с учётом автоподгрузки расширений. Фактически это __autoload() для функций.
// call_user_func()
print_r(b::call('explode', '|', 'Test1|Test2'));
// call_user_func_array()
print_r(b::call('*explode', array('|', 'Test1|Test2')));
// Hello World! My name is The Great Cornholio and I say "Fire! Fire!".
print_r(b::call('tag_hello_world', array()));
// Fatal error: Call to undefined function tag_hello_world()
print_r(tag_hello_world(array());
Проверяет существует ли функция с учётом неподключённых расширений.
Данный метод следует регистрировать как autoload-функцию, если Berry запущен без помощи b::init().
Загружает модуль из дериктории load.
// загружает load/test1.php
print_r(b::load('test1'));
// загружает load/test2/index.php
print_r(b::load('test2'));
// загружает load/test2/some.php
print_r(b::load('test2.some'));
Загружает и возвращает шаблон из папки show. Вторым параметром может быть передан массив переменных видимые только этому шаблону.
// загружает show/test1.phtml
print_r(b::show('test1'));
// загружает show/test2/index.phtml
print_r(b::show('test2'));
// загружает show/test2/some.phtml
print_r(b::show('test2.some'));
Обратите внимание: если вам претит Piles и вы используете чистый PHP в шаблонах, то все функции расширений будут подгружаться автоматически.
Пробуем тег <hello_world />: <?=tag_hello_world(array('name' => 'Великий Кукурузо')) ?>.
// Не верно, так как не имеет смысла. b::show() сам это сделает.
// Причём, подключит только то, что действительно используется
include file::path('ext/hello_world.php');
echo b::show('index');
Если вызываемой функции не существует, то b::show() найдёт её в карте составленной b::call() и подключит файл. Делается подобный финт ушами с помощью token_get_all(), так что на скорость это не повлияет.
Возвращает массив с данными по статистике использования.
print_r(b::stat());
/* Array
(
[pgt] => 0.0333409118652
[sql] => Array
(
[time] => 0.000391960144043
[count] => 0
)
[memory] => Array
(
[limit] => 8 МБ
[usage] => 2.04 МБ
[peak] => 2.05 МБ
)
) */
Обратите внимание: на самом деле, sql.count врёт. Таки есть один запрос на set names при соеденениии с БД, но из подсчёта он изымается.
Указав первый параметр можно получить конкретный ключ массива.
// 2.04 МБ
print_r(b::stat('memory.usage'));