Класс B

Класс является ядром движка и содержит основные методы и переменные.

Переменные

Ни одну из переменных устанавливать необязательно, если вы будете запускать Berry через метод b::init().

b::$path

С помощью 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: Почтовый робот 
and_test: Что-нибудь тестовое

Мы получим настройку для почты вида

sender: Почтовый робот 
type: text/plain
and_test: Что-нибудь тестовое

b::$lang

b::$lang содержит языковой код из заголовка Accept Language, по умолчанию ru.

b::$autoload

С помощью переменной b::$autoload можно: а) указать карту классов, где имя класса ключ, а значение - путь до него; б) закэшировать карту сгенерированную скриптом по ходу работы.

Методы

b::version()

Возвращает номер версии движка и кодовое имя линейки.

Пример

// array([name] => Chinpoko [id] => 0.1.6)
print_r(b::version());

// 0.1.6
print_r(b::version('id'));

b::init()

Подготавливает Berry к работе.

b::q()

Возвращает часть УРЛа.

Пример

Предположим, есть у нас УРЛ вида 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));

b::l()

Синоним tags::vars().

b::len()

Замена count() и strlen().

b::config()

Пример

// text/plain
print_r(b::config('lib.mail.type'));

b::i18n()

Возвращает перевод строки в соответствии с текущими настройками языка. В случае, когда перевода нет, возвращается строка из набора en.

b::is_windows()

Собственно, да.

b::call()

Служит для замены функций 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());

b::function_exists()

Проверяет существует ли функция с учётом неподключённых расширений.

b::autoload()

Данный метод следует регистрировать как autoload-функцию, если Berry запущен без помощи b::init().

b::load()

Загружает модуль из дериктории 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'));

b::show()

Загружает и возвращает шаблон из папки 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'));

Обратите внимание: если вам претит Tags и вы используете чистый PHP в шаблонах, то все функции расширений будут подгружаться автоматически.

index.phtml

Пробуем тег <hello_world />: <?=tag_hello_world(array('name' => 'Великий Кукурузо')) ?>.

index.php

// Не верно, так как не имеет смысла. b::show() сам это сделает.
// Причём, подключит только то, что действительно используется
include file::path('ext/hello_world.php');
echo b::show('index');

Если вызываемой функции не существует, то b::show() найдёт её в карте составленной b::call() и подключит файл. Делается подобный финт ушами с помощью token_get_all(), так что на скорость это не повлияет.