2013-09-07 2 views
0

Я строю свое первое приложение с Kohana и использую в нем базовую систему шаблонов. В моих шаблонах я хочу повторить переменные для различного содержимого страницы, но только тогда, когда каждый переменная установлена, и я хочу, чтобы сохранить код в шаблонах как можно короче, так что-то вроде этого:php тернарная стенография для использования в шаблоне

<?=$foo?> 

отлично работает, если переменная установлена, но если я не получаю уведомление. Так я думал, что тройная оператор будет делать трюк красиво:

<?=$foo?:''?> 

в соответствии с PHP инструкции, с 5.3 это нормально, чтобы оставить из средней части и выше, не должен вывести ничего, если переменная не установлена, но Я все еще получаю уведомление об ошибке. «Обратите внимание: неопределенная переменная: Foo в /»

я могу получить желаемый результат с небольшим изменением, чтобы подавить уведомление:

<[email protected]$foo?:''?> 

, но я знаю, что это вообще не страдает практиковать и хотели бы, если возможно, лучшее решение, в то время как st плохо соблюдая код в файлах шаблонов.

следующие работы, но это не так, кратким (в основном потому, что мои фактические переменные могут быть довольно длинными):

<?=isset($foo)?$foo:'';?> 

я упускаю что-то или делать что-то не так?

ответ

2

Терминальная операция не предназначена для замены проверки с помощью isset() - ей нужна ее переменная, или вы получаете уведомление.

Шаблонные двигатели обычно предлагают способ использования значения по умолчанию вместо этого, но они также не используют чистый PHP-код. Вам здесь не повезло: либо подавите уведомление, либо используйте более длинный вариант кода. Или убедитесь, что настроена каждая переменная, что позволяет считать любое уведомление ошибкой.

+0

ОК, я думаю, что я неправильно понял следующее: «С PHP 5.3 можно исключить среднюю часть тернарного оператора. Expression expr1?: Expr3 возвращает expr1, если expr1 имеет значение TRUE и expr3 в противном случае. " Я использую чистые php в своих шаблонах, поэтому я предполагаю, что в этом случае самым чистым вариантом является подавление ошибок. спасибо за ваш вклад. – arumdev

+0

Чтобы избежать уведомлений, вам нужно использовать 'isset ($ var)?: $ Default', но это не вернет содержимое' $ var', а результат 'isset ($ var)', который является «истинным» - и это действительно не работает. 'isset ($ var)? $ var: $ default' необходим. – Sven

1

Чтобы избежать уведомлений для неопределенных переменных, вы можете создать пользовательскую функцию, которая принимает первый параметр по ссылке

function tplvar(&$value, $default = '') { 
    return ($value !== null) ? $value : $default; 
} 

<?=tplvar($foo, 'bar');?> 

Неинициализированных переменными передаются по ссылке будет рассматриваться как null с.

+0

спасибо, что кажется хорошим обходным путем. – arumdev