|
wats ↓
|
 |
|
28 Ноябрь, 2010, 03:37:42
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: -1
Сообщений: 142 Сила слова: -0.7
|
Привет! Вот для примера сильно упрощенный класс натив-шаблонизатора:
class Template {
protected $_template;
protected $_data = array();
public function __construct ($template, array $data = NULL)
{
$this->_template = $template;
if ($data !== NULL)
$this->_data = $data;
}
public function __toString ()
{
return (string )$this-> render();
}
public function render ()
{
extract($this->_data );
require $this->_template;
}
}
Проблема в том что если в $data передан другой объект этого же класса с другим шаблоном (то есть в главный шаблон сайта я вставляю с помощью переменной блок с другим шаблоном) и при этом к массиву $this->_data я применю функцию htmlspecialchars то в браузер выводится сначала шаблон из блока, а ниже уже главный шаблон. Если уберу htmlspecialchars то все работает как надо. Я как понял что это происходит из за магической функции __toString, она когда объект преобразует в строку почему то автоматом выводит шаблон в браузер, но это происходит только когда к массиву $this->_data применяется функция htmlspecialchars.
|
|
|
|
|
Записан
|
обычный web-мастер
|
|
|
|
wats ↓
|
 |
|
28 Ноябрь, 2010, 04:02:38 , спустя 24 минуты 56 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: -1
Сообщений: 142 Сила слова: -0.7
|
Прошу прощения, помойму виновата функция htmlspecialchars
$news = new Template ('templates/news.php', array('title' => 'Новости'));
htmlspecialchars($news, ENT_QUOTES, 'UTF-8');
выведет в браузер уже обработанный шаблон!?
|
|
|
|
|
Записан
|
обычный web-мастер
|
|
|
|
phpdude ↓
|
 |
|
28 Ноябрь, 2010, 04:04:25 , спустя 1 минуту 47 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 344
Сообщений: 20790 Сила слова: 1.65
|
wats, да
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
wats ↓
|
 |
|
28 Ноябрь, 2010, 04:06:43 , спустя 2 минуты 18 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: -1
Сообщений: 142 Сила слова: -0.7
|
phpdude, точнее она вывела шаблон в браузер с уже подставленными значениями, но своего прямого назначения не выполнила
|
|
|
|
|
Записан
|
обычный web-мастер
|
|
|
|
wats ↓
|
 |
|
28 Ноябрь, 2010, 04:23:09 , спустя 16 минут 26 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: -1
Сообщений: 142 Сила слова: -0.7
|
Хм, как с этим бороться? Если попался объект, то что с ним делать? Просто пропускать нельзя.
|
|
|
|
|
Записан
|
обычный web-мастер
|
|
|
|
phpdude ↓
|
 |
|
28 Ноябрь, 2010, 04:25:36 , спустя 2 минуты 27 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 344
Сообщений: д-о-х-у-я! Сила слова: 1.65
|
ytn, это не выводит, просто когда ты делаешь requre от шаблона - он уходит в вывод, как будто это echo, это надо понимать.
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
wats ↓
|
 |
|
28 Ноябрь, 2010, 04:31:24 , спустя 5 минут 48 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: -1
Сообщений: 142 Сила слова: -0.7
|
Я так и понял, но почему шаблон уходит в вывод?, если он должен в переменную записаться, ведь без htmlspecialchars именно так и происходит и все работает нормально.
|
|
|
|
|
Записан
|
обычный web-мастер
|
|
|
|
phpdude ↓
|
 |
|
28 Ноябрь, 2010, 04:36:22 , спустя 4 минуты 58 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 344
Сообщений: д-о-х-у-я! Сила слова: 1.65
|
если он должен в переменную записаться,
а если я скажу, что в этом утверждении ТЫ НЕПРАВ? :)
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
wats ↓
|
 |
|
28 Ноябрь, 2010, 04:42:25 , спустя 6 минут 3 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: -1
Сообщений: 142 Сила слова: -0.7
|
а если я скажу, что в этом утверждении ТЫ НЕПРАВ? :)
возможно, но
без htmlspecialchars именно так и происходит и все работает нормально
Спустя 2 минуты 26 секунд добавил забыл, в классе еще есть магические методы __set и __get для работы с массивом $this->_data
|
|
|
|
|
Записан
|
обычный web-мастер
|
|
|
|
phpdude ↓
|
 |
|
28 Ноябрь, 2010, 04:47:43 , спустя 5 минут 18 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 344
Сообщений: 20790 Сила слова: 1.65
|
без htmlspecialchars именно так и происходит и все работает нормально
'nj atqk Спустя 4 секунды добавил это фейл
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
wats ↓
|
 |
|
28 Ноябрь, 2010, 05:08:26 , спустя 20 минут 43 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: -1
Сообщений: 142 Сила слова: -0.7
|
phpdude, спасибо, кажется разобрался
|
|
|
|
|
Записан
|
обычный web-мастер
|
|
|
|
WST ↓
|
 |
|
29 Июнь, 2011, 08:26:07 , спустя 213 дней 2 часа 17 минут 41 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 6 Сила слова: 0
|
Мне иногда очень не хватает функции типа __fromString(). Для неявного создания объектов из строк. К примеру, если некоторый метод объявлен как
public function foo(Bar $bar) {
// …
}
Было бы очень классно иметь возможность совершить вызов типа foo('Hello, world!') и получить в теле метода свежесозданный объект класса Bar…
|
|
|
|
|
Записан
|
WBR, WST
|
|
|
|
Абырвалг ↓
|
 |
|
29 Июнь, 2011, 08:31:13 , спустя 5 минут 6 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
PHP Infected, симфоеб, маконенавистник
Группа: Джедаи Карма: 80
Сообщений: 6096 Сила слова: 1.31
|
serialize/unserialize?
serializableInterface, __sleep/__wakeup?
|
|
|
|
|
Записан
|
PHP does the job since 1995 Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
|
|
|
|
WST ↓
|
 |
|
29 Июнь, 2011, 08:38:54 , спустя 7 минут 41 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 6 Сила слова: 0
|
Не. Представьте, что конструктор объекта принимает на вход строку. К примеру, сам класс представляет собой класс «строка», а в методах, оперирующих со строками, хотелось бы сразу получать строки в виде объектов. В C++ с этим проблем не возникает, но в PHP не знаю как сделать, и можно ли.
|
|
|
|
|
Записан
|
WBR, WST
|
|
|
|
fgets ↓
|
 |
|
29 Июнь, 2011, 08:44:03 , спустя 5 минут 9 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: -1
Сообщений: 1119 Сила слова: -0.09
|
выдуманные пхп проблемы, зачем нужна строгая типизация языку с динамической типизацией? навыдумывают себе проблем
|
|
|
|
|
Записан
|
эй детка не ссы в бассейн
Если в бочку с говном положить ложку меда — получится бочка говна. Если в бочку с медом положить ложку говна, не обольщайтесь ...
|
|
|
|