2011-02-14 3 views
0
이 코드를 이해하려고 노력 중이 야

을 만들고 난 :(수없는 $time 변수이 생성 기능을 성공적으로 통과된다,하지만 난 때 않는 이유는PHP - 기능 문제

$time = date('Y-m-d', strtotime('-30 days')); 
$what = create_function('$a', 'return $a.'.'"'." AND date > '$time'".'"'.';'); 

:

$limit = 10; 
$what = create_function('$a', 'return '.'"'." LIMIT '$limit'".'"'.';'); 

$limit하지 않습니다

추신 : 나는 $what = create_function('$a', 'return '.'"'." LIMIT 10".'"'.';');를하려고하면 그것은 작동 ...

+0

당신은 뭔가를 놓치고 있어야합니다 - 제가 말할 수있는 한, 당신이 예상대로 작동해야합니다. – troelskn

+1

100 % 확신을 받으려면 :''return ' "LIMIT'. $ limit. '";''시도하십시오. 문자열 연결과 quotation orgy를 훨씬 간단하게 만드는'LIMIT' 이후의 숫자는 따옴표로 묶지 않아야합니다 (그러나'$ limit'을 연결하지 않아도 첫 번째와 LIMIT '$ limit' "." "; '') –

+0

''.''문자열을 추가 할 때 따옴표 붙은 문자열에는 의미가 없습니다. – powtac

답변

2

에 쉽게 이동합니다. LIMIT 이후의 숫자는 SQL 구문에서 따옴표로 묶지 않아야합니다.

하지만 함수를 작성, 당신은 함수에 매개 변수로 $limit을 전달할 수 :

$what = create_function('$limit', 'return "LIMIT $limit";'); 
$str = $what(10); 

또는 전혀 create_function를 사용하지 않는 그냥 직접 문자열 연결을 수행

$str = 'LIMIT ' . $limit; 
1

예제에서는 '" 사이의 값을 읽고 알기가 어렵습니다.

이 시도 :

$what = create_function('$a', "return \"LIMIT $limit;\""); 

뿐만 아니라

$what = create_function('$a', 'return \'LIMIT $limit;\''); 

또는

$what = create_function('$a', 'return "LIMIT '.$limit.';"'); // most clear, I think 

당신은 문자를 이스케이프로 \을 사용할 수 있습니다, 이것은이 후 다음 문자가 될 수 없음을 의미합니다 현재 따옴표 문자 인 경우 닫는 따옴표로 해석됩니다.

예 :

echo '\''; // will output ' 
echo '\"'; // will output \" 
echo "\""; // will output " 
+0

두 가지 모두 작동하지 않으며 두 번째 것은 작동자가 원하는 것을 수행하지 않습니다. 그리고 문자열을 반환해야합니다. 현재 양식에서는 오류가 발생합니다. –

+1

두 번째 것은'$ limit'이'$ what'에 의해 생성 된 함수의 지역 변수가 아니기 때문에 작동하지 않을 것입니다. – Lekensteyn

1

나는 당신의 두 번째 코드를 테스트 한, 그리고 제대로 $limit 전달, 작동 :

$what = create_function('$a', 'return "' . " LIMIT '$limit'" . '";'); 
:

<?php 
$limit = 10; 
$what = create_function('$a', 'return '.'"'." LIMIT '$limit'".'"'.';'); 
echo $what(2);// note: `2` was randomly chosen, and used because $what expects an argument 
// result: ` LIMIT '10'` 
?> 

$what 라인으로 쓸 수있다

실수로 작성하지 않도록주의하십시오 (quot $limit 주위에 전자 문자 :이 경우

$what = create_function('$a', 'return "' . ' LIMIT "$limit"' . '";'); 

$limit10 ($limit의 값)로 치환되지 않습니다.

1

우선, 왜 내가 create_function을 사용하고 있는지 궁금합니다. (일반적으로 존재하는) 기회가 있다면, 일반적으로 코드가 엉성하기 때문에이를 피하려고 노력해야합니다.

내가 알 우선 두 번째 예는 $a와 아무것도하지 않는다는 것입니다 :

$what = create_function('$a', 'return '.'"'." LIMIT '$limit'".'"'.';'); 

아마이어야한다 : 문자열을 연결하면

또한
$what = create_function('$a', 'return $a . '.'"'." LIMIT '$limit'".'"'.';'); 

, 서라운드 시도 공백으로 .. 그것은 당신의 코드를 더 읽기 쉽도록 만들 것이다 (따라서 디버그 블블).

$what = create_function('$a', "return \"LIMIT $limit\";"); 

또는

$what = create_function('$a', 'return "LIMIT ' . $limit .'";'); 

이 코드는 작동합니다 : 마지막으로, 단일 및 이중 따옴표 : 코드는 매우 간단하게 할 수

2

문자열을 연결할 때 코드가 조금 복잡해 보입니다. 더 간단한 접근을 시도하십시오.

create_function('$a', sprintf('return "LIMIT %d"',$limit)); 

물어볼 필요가없는 경우 간단한 문자열을 반환하는 함수를 만드는 이유는 무엇입니까?

0

create_function에서 $limit은 작은 따옴표로 묶습니다. 이중 따옴표 ("LIMIT $limit")로 묶거나 연결 (.) 연산자 (예 : '".$limit."')를 사용해야합니다.

+1

Chris, 고맙습니다. 적어도 일부 사람들은 여전히 ​​관심이 있습니다. –