2013-03-26 2 views
0

비슷한 질문이 게시되었지만 답변을 찾을 수 없습니다.If 문 내부 함수 작동하지 않음

이 IF 문은 올바르게 작동합니다.

$subject_id_top = "case studies"; 
if($subject_id_top == "case studies") {echo "active";} 

하지만이 IF 문을 함수 안에 삽입하면 작동하지 않습니다.

<style> 

.active { 
color:#F00; 
} 
</style> 


<?php 
$subject_id_top = "case studies"; 

function menu_active() { 
if($subject_id_top == "case studies") {echo "active";} 
} 


<a class="<?php menu_active(); ?>" href="#">Case Studies</a> 
?> 

이것은 매우 기본적인 문제인 것처럼 보입니다.하지만 내 인생에서 나는 그것을 파악할 수있었습니다. 커뮤니티의 도움이 될 것입니다. 미리 감사드립니다.

답변

1

기능 내부 $subject_id_top 함수 (the global scope)의 범위에 $subject_id_top을 의미하기 때문에, 당신은 문, 말하자면, '수입'이 필요 :

global $subject_id_top; 

당신이있는 거 작동합니다

function menu_active() { 
    global $subject_id_top; 
    if($subject_id_top == "case studies") {echo "active";} 
} 

그러나 외부 범위의 정보에 의존하는 것이 일반적으로 바람직하지 않습니다.

function menu_active($subject_id_top) { 
    if($subject_id_top == "case studies") {echo "active";} 
} 

을 그리고 인수로 글로벌 범위에서, $subject_id_top와 그 함수를 호출 : 당신은 예를 들어,과 같이이 문제를 회피하기 위해 인수를 허용하도록 기능을 리팩토링 할 수

<?php menu_active($subject_id_top); ?> 
+1

양자 택일로 당신은 subject id를 함수에 넘겨 줄 수 있습니다 : menu_active ($ subject_id_top) - 어떤 것은 매우 일반적인 일이지만 이것과 같은 전역 변수의 사용에 반대합니다. –

+0

@fireeyedboy PHP에 익숙하지 않은 것을 알 수 있습니다. 함수 밖의 값이 "가져올"수 있어야한다는 것을 모릅니다. 이것을 설명해 주셔서 감사합니다. 왜 이것이 나쁜 습관입니까? 큰 환경에서 실패 할까? – user2209695

+1

함수에서 사용되는 전역 변수에 대한 읽기를 수행하고 발생할 수있는 결과를 확인했습니다. 다시 한번 감사드립니다. – user2209695