2013-01-24 3 views
3

나는 길이가 긴 if..else 함수를 모듈화하려고합니다.문자열에 논리 비교를 저장할 수 있습니까?

$condition = "$a < $b"; 
if($condition) 
{ 
    $c++; 
} 

리터럴 문자열을 논리식으로 변환하는 방법이 있습니까?

+1

당신 * * eval''이 작업을 수행 할 수 있지만 표준 접근 방식은 어쩌면 ... –

+0

을 기능의 무리를 정의하는 것 당신은 "모듈화 (modularise)"를 정확히 의미하는지 설명해야합니다. –

+0

길게는 if..else 블록 (기능 아님)을 표시하십시오. 나는 거의 확실하다. 해결책은 '모듈화'가 아니다. – markus

답변

7

나는 긴 if..else 함수를 모듈화하려고하고있다.

당신은 단지 부울 true 또는 false 저장, 그것을위한 문자열의 조건을 넣을 필요가 없습니다 : 정의 사이에서 변경 될 수 있습니다 $ a와 $ B의

$condition = ($a < $b); 
if($condition) 
{ 
    $c++; 
} 

값을 $ 조건 및 그 사용법의 예 :

하나의 해결책은 클로저 (정의와 사용이 동일한 범위에서 발생한다고 가정)입니다.

그러나 나는 당신이 달성하려는 것을 원격으로 알지 못해서 이것이 당신에게 의미가 있는지 알지 못합니다.

+0

$ a 및 $ b의 값은 $ condition의 정의와 사용법 사이에서 변경 될 수 있습니다. – hek2mgl

+1

그러면 클로저로 정의 할 수 있습니다. 편집을 참조하십시오. –

+0

클로저 물건 위에있는 부분을 제거하면 가장 좋은 답변이됩니다 (이미 무엇입니까 :) – hek2mgl

-4
<?php 
    $a=0; 
    $b=1; 
    function resultofcondition() 
    { 
     global $a,$b; 
     return $a<$b; 
    } 
    if(resultofcondition()){ 
     echo " You are dumb,"; 
    }else{ 
     echo " I am dumb,"; 
    } 
    $a=1; 
    $b=0; 
    if(resultofcondition()){ 
     echo " You were correct."; 
    }else{ 
     echo " in your face."; 
    } 
?> 

실제로 논평 해 주신데 대해 감사드립니다. GLOBAL 매개 변수가 누락되었습니다. 투표 한 사람들은 어떤 코드를 출력합니까? ¬_¬ w/e는 재미있다 xD

+1

이것은 PHP에서는 작동하지 않습니다.'$ a'와'$ b'는 함수 범위에서 사용할 수 없습니다. –

+0

그들은 .-. .-. –

+0

@ RicardoOrtegaMagaña'global $ a, $ b; '를 사용하지 않는 한 가장 확실한 것은 없습니다. –

1

eval을 사용하면됩니다. 왜 당신은 단지 그 상태를 즉시 평가하지 않을 지 확신 할 수 없습니다.

+1

'eval'은 결코 문제의 해결책이 아닙니다. 우리는 그것을 사용하지 않아야합니다. – Kasyx

2

사용 람다 당신이 결과를 결정하기에 충분 변수를 알고 있다면

$f = function ($a, $b) { return $a < $b; } 

if ($f($x, $y)){} 
+0

+1. 비록 당신이 여기에 람다를 필요는 없지만, 그냥 평범한 함수 선언은 잘 할 것이다. :) –