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: Почтовый робот <no-reply@example.com>
and_test: Что-нибудь тестовое

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

sender: Почтовый робот <no-reply@example.com>
type: text/plain
and_test: Что-нибудь тестовое

b::$lang

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

Методы

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()

Полчает или устанавливает значение переменной (в пространство $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'));

b::len()

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

b::config()

Пример

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

b::lang()

Возвращает перевод строки в соответствии с текущими настройками языка. В случае, когда перевода нет, возвращается строка из набора 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'));

Обратите внимание: если вам претит Piles и вы используете чистый 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(), так что на скорость это не повлияет.

b::stat()

Возвращает массив с данными по статистике использования.

Пример

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'));