필자는 PHP를 내 뷰 레이어의 템플릿 언어로 사용하고 있습니다. 다음을 약간 더 명확하고 간결하게 만들 수 있습니까?PHP 템플릿의 정의되지 않은 변수
//in temp.phtlm
<?= (isset($user['name'])) ? $user['name'] : null; ?>
불행하게도 우리는 심지어 그것을 위해 함수를 정의 할 수 없습니다 :
// as you know yet a notice is generated when calling function with undefined parameter
function out($var)
{
return (isset($var)) ? htmlentities($var) : null;
}
PHP에서'@'를 사용하는 것은 나쁜 습관입니다. 나는이 길로 가지 않을 것을 희망한다. 그리고 그것은 대안이 아닙니다. 어떻게'$ user [ 'name']'에 메소드를 적용 할 수 있습니까? '@htmlentities (@ user [ 'name'])'또는'@htmlentities ($ user [ 'name'])'또는'@htmlentities (@ $ user [ 'name'])'? '@'를 피하는 간단한 규칙은 항상 변수를 템플릿에 전달하는 것입니다. 나는이 솔루션이 매우 짧다고 생각하지만 때로는 그러한 해킹을 피하기 위해 데이터를 준비해야 할 때도있다. ('@'는'PHP'에서 해킹으로 간주되어야한다). 그냥 예방책이야. – Nemoden
@Nemoden'(isset ($ user [ 'name'])))에 대한 최선의 해결책은 무엇입니까? $ user [ 'name'] : null;'은 템플릿에 있습니다. 당신은 고지를 숨기는 대신 그것을 사용할 수 있습니다. 'htmlentities (@ $ user [ 'name']) 또는 @htmlentities ($ user [ 'name']) 또는 @htmlentities (@ $ user [ 'name'])'는 완전히 괜찮습니다. '@'는 상황에 가장 잘 들어 맞습니다. – PHPst
그것은 최선의 해결책은 아닙니다. http://php.net/manual/en/language.operators.errorcontrol.php를 읽으십시오 : "@를 쓰는 것은 dog-slow입니다. PHP는 이런 식으로 에러를 억제하기 위해 오버 헤드를 발생 시키므로 속도와 트레이드 오프 사이의 트레이드 오프입니다. 편리함. " 그리고 행동에있어서 dog-slow입니다. - 코드에서 각'@ '를 처리하기 위해'isset'에 2ms 가량 더 걸립니다 (테스트에서 생각한 것까지). 오류 억제 기능은 절대로 "최상의 솔루션"이 아닙니다. 오류 (심지어 고지 사항)를 정상적으로 처리하는 대신 눈을 감 으십시오. – Nemoden