Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 05 июл 2025, 11:46

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
СообщениеДобавлено: 15 июл 2012, 13:51 
Не в сети
Бывалый

Зарегистрирован: 11 июл 2012, 00:30
Сообщения: 31
Всем добрый день. У меня есть массив $data, который передается в шаблон. Он существует только тогда, когда был отправлен post запрос. Вот мне интересно, почему нет ошибки NOTICE, ведь я передаю не существующую переменую.Передаю с помощью bind


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 июл 2012, 15:15 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Поэтому и нет ошибки - потому, что с помощью bind - там переменной присваивается значение по ссылке.
По этой же причине нельзя написать
Код:
$obj_articles = ORM::factory('article');
....
....
->
bind('articles', $obj_articles->find_all()) 
т.к. это не переменная.

Смотрите иногда в исходники (system\classes\kohana\view.php), там комментарии есть и сразу стало бы все понятно:
Код:
public function bind($key, & $value)
{
    $this->_data[$key] =& $value;
    return $this;
}
 

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 июл 2012, 16:17 
Не в сети
Бывалый

Зарегистрирован: 11 июл 2012, 00:30
Сообщения: 31
AmberLEX писал(а):
Поэтому и нет ошибки - потому, что с помощью bind - там переменной присваивается значение по ссылке.
По этой же причине нельзя написать
Код:
$obj_articles = ORM::factory('article');
....
....
->
bind('articles', $obj_articles->find_all()) 
т.к. это не переменная.

Смотрите иногда в исходники (system\classes\kohana\view.php), там комментарии есть и сразу стало бы все понятно:
Код:
public function bind($key, & $value)
{
    $this->_data[$key] =& $value;
    return $this;
}
 

Мне все равно непонятно...Переменной вообще не существует ведь, значения соответственно тоже. Что он по ссылке то присваивает, если ничего нет.У меня переменной $value не существует, я ее не где не обьявлял, я просто прописал bind('data', $data) . NOTICE нету. Если б $data была хотя бы пустой, я бы понял


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 июл 2012, 16:56 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Цитата:
Что он по ссылке то присваивает, если ничего нет
Код:
<?php
    error_reporting(E_ALL | E_STRICT);

    $a =& $b;
    var_dump ($a);
    var_dump ($b);

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 июл 2012, 19:45 
Не в сети
Бывалый

Зарегистрирован: 11 июл 2012, 00:30
Сообщения: 31
Код:
    class Test
    {
        protected $_data;
       
        public function bind($key, &$value)
        {
            $this->_data[$key] = &$value;
            print_r($this->_data);
        }
    }
       
        $obj = new Test();
        $obj->bind(5, $a);

Почему это возвращает array(5 => )
Код:
        $data = array();
        $data = &$v;
        var_dump($data);

А это NULL ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 июл 2012, 21:39 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Если честно, я так далеко не углублялся)
Но
Цитата:
Почему это возвращает array(5 => ) ... А это NULL
print_r($a) - выводит информацию о переменной в удобочитаемом виде.
var_dump($a) - отображает структурированную информацию об одном или нескольких выражениях, включая их тип и значение.
поэтому, print_r возвращает array(5 => )
Замени на var_dump и посмотри в своем примере.

Если нужно глубже - пробуй, экспериментируй, усложняй постепенно.
Вот набросал пример, упростив view.php :
Код:
<?php
error_reporting
(E_ALL | E_STRICT);

class View {

    protected $_data = array();
    protected $_file;

    // factory метод - с которого начинаем
    public static function factory($file = NULL, array $data = NULL)
    {
        return new View($file, $data);
    }
    
    
// Вызывается из factory
    public function __construct($file = NULL, array $data = NULL)
    {
        if ($file !== NULL)
        {
            // Тут ищем сохраняем путь к шаблону (прописал )
            $this->_file = $file . '.php';            
            return $this
;
        }

        // это то, что не bind, а set (т.е. сейчас нам не нужно, можно вырезать)
        if ($data !== NULL)
            $this->_data = $data + $this->_data;
    }

    // Такой как есть
    public function bind($key, & $value)
    {
        $this->_data[$key] =& $value;
        
        
// Выводим здесь или заданное или не заданное значение
        var_dump($this->_data);

        return $this;
    }

    // Урезанный 
    public function render($file = NULL)
    {
        if ($file !== NULL)
            $this->set_filename($file);

        return View::capture($this->_file, $this->_data);
    }

    // Урезанный 
    protected static function capture($kohana_view_filename, array $kohana_view_data)
    {
        extract($kohana_view_data, EXTR_SKIP);
        ob_start();
        include $kohana_view_filename;
        return ob_get_clean();
    }
}


// Задаем или не задаем значение (раскомментировать для теста)
//$r = 'Преременная $r';

// Имя шаблона
$tpl = View::factory('view')
    ->bind('yyy', $r)
    ->render();

// Выводим шаблон
echo '<p>' . $tpl . '</p>';

// Выводим отладочную инфу
echo '<br>Отладка:';
var_dump($tpl);
 

В эту же папку кладем view.php
Код:
Это шаблон view.php
<?php echo $yyy ?>

p/s/ только это не совсем понятным осталось &NULL :D

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 июл 2012, 22:46 
Не в сети
Бывалый

Зарегистрирован: 11 июл 2012, 00:30
Сообщения: 31
AmberLEX писал(а):
Если честно, я так далеко не углублялся)
Но
Цитата:
Почему это возвращает array(5 => ) ... А это NULL
print_r($a) - выводит информацию о переменной в удобочитаемом виде.
var_dump($a) - отображает структурированную информацию об одном или нескольких выражениях, включая их тип и значение.
поэтому, print_r возвращает array(5 => )
Замени на var_dump и посмотри в своем примере.

Если нужно глубже - пробуй, экспериментируй, усложняй постепенно.
Вот набросал пример, упростив view.php :
Код:
<?php
error_reporting
(E_ALL | E_STRICT);

class View {

    protected $_data = array();
    protected $_file;

    // factory метод - с которого начинаем
    public static function factory($file = NULL, array $data = NULL)
    {
        return new View($file, $data);
    }
    
    
// Вызывается из factory
    public function __construct($file = NULL, array $data = NULL)
    {
        if ($file !== NULL)
        {
            // Тут ищем сохраняем путь к шаблону (прописал )
            $this->_file = $file . '.php';            
            return $this
;
        }

        // это то, что не bind, а set (т.е. сейчас нам не нужно, можно вырезать)
        if ($data !== NULL)
            $this->_data = $data + $this->_data;
    }

    // Такой как есть
    public function bind($key, & $value)
    {
        $this->_data[$key] =& $value;
        
        
// Выводим здесь или заданное или не заданное значение
        var_dump($this->_data);

        return $this;
    }

    // Урезанный 
    public function render($file = NULL)
    {
        if ($file !== NULL)
            $this->set_filename($file);

        return View::capture($this->_file, $this->_data);
    }

    // Урезанный 
    protected static function capture($kohana_view_filename, array $kohana_view_data)
    {
        extract($kohana_view_data, EXTR_SKIP);
        ob_start();
        include $kohana_view_filename;
        return ob_get_clean();
    }
}


// Задаем или не задаем значение (раскомментировать для теста)
//$r = 'Преременная $r';

// Имя шаблона
$tpl = View::factory('view')
    ->bind('yyy', $r)
    ->render();

// Выводим шаблон
echo '<p>' . $tpl . '</p>';

// Выводим отладочную инфу
echo '<br>Отладка:';
var_dump($tpl);
 

В эту же папку кладем view.php
Код:
Это шаблон view.php
<?php echo $yyy ?>

p/s/ только это не совсем понятным осталось &NULL :D

Интересно, почему в стандартном классе нет свойств
Код:
    protected $_data = array();
    protected $_file;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 июл 2012, 23:23 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Нафига ты цитируешь эти простыни? ))
Ну как это нет, я их не с неба взял) $_data = Ctrl+f

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group