2011-01-14 2 views
0

기본적으로, 내가 알고 싶은 것은 create_function 함수의 두 번째 매개 변수에 대해 어쨌든 세미콜론없이 문자열을 전달하는 것입니까? 또는 작동하지 않을 것입니다.PHP create_function, 세미콜론없이 함수?

예 : 문자열에 세미콜론이

taken from php.net 
create_function('$a,$b', 'return "CRCs: " . crc32($a) . " , ".crc32(b);'), 

통지있다. 누군가가 아직 실행/평가할 세미콜론없이 함수를 입력 할 수있는 가능한 방법이 있습니까?

+0

왜 필요한가요? –

+2

어 또는 뭔가 시도해보십시오. – dqhendricks

+0

'crc32 ($ b)'를 원하셨습니까? –

답변

1

불가능하지 않습니다. PHP는 세미콜론에 민감하므로 오른쪽 중괄호 앞에 오는 모든 문을 종료하는 데 사용해야합니다. 심지어 이와 같은 규칙적인 기능을 시도해 보았습니다.

function f() { 
    return 1 
} 

JavaScript와 달리 구문 오류가 발생했습니다.

0

사용자 입력을 사용하기 전에 사용자 입력을 항상 위생적으로 처리해야합니다. 사용자 입력에서 세미콜론을 찾으십시오. 누락 된 경우 추가하십시오.

사용자가 여기에 아무 것도 입력 할 수없는 경우 잘못된 함수 이름을 입력하거나 쓰레기 만 버리면 여전히 문제가 발생합니다.

preg_match()으로 유효화 할 수 있지만 (다른 사람들이 나를 도와 줄 수 있도록 내가 전문가의 전문가는 아니지만) 유효성을 검사 할 수 있습니다.

-3

먼저, 왜 필요합니까? 그건 정말 더러운 함수를 만드는 방법입니다. 사용자가 직접 함수를 작성할 수있는 인터페이스를 만들고 싶기 때문에 (그리고 이것은 사용자에게만 해당되거나 큰 보안 문제 일 것입니다.) 나는 당신이 그것을 어떻게 사용하고 싶은지를 정말로 알지 못합니다.

어쨌든, 당신이 질문에, 당신은 그것이 작동하는지 아닌지 신경 쓸 필요가 없습니다. 내 말은, 작동하는지 테스트하는 것입니다. 단지 세미콜론을 쓰지 않는 것이 좋습니다. 문자열에 대한 간단한 테스트 일뿐입니다.

+0

제 질문을 올바르게 읽으면 누군가가 세미콜론없이 그 부분을 만들 수 있는지 알고 싶다는 것을 알았을 것입니다. 세미콜론이 문자열 끝에 있어야합니다. – Ozzy

+0

올바르게 대답하면 세미콜론이 줄의 끝에 있어야한다는 것을 결코 알지 못할 것입니다 ... 여전히 직접 시도하십시오. –

2

create_function()을 사용하면 익명의 함수가 생성됩니다. 두 번째 매개 변수는 함수의 코드 인 문자열입니다 (다른 함수와 마찬가지로). '}'는에서

$coolfunction = create_function('$thing', 'if ($thing > 0) {return "Yes"; } else { return "no!"; }'); 

echo $coolfunction(1) . ' and ' . $coolfunction(-1); 

끝을 밖으로 인쇄 : 그것은 예를 들어, 세미콜론으로 종료 할 필요가 없습니다 예와 아니오!

+0

그것은 그것을 끝내지 않아도되지만, 적어도 하나의 권리를 포함해야합니까? 그렇지 않으면 유효한 PHP를 만들 수 없습니까? – Ozzy

+0

흠 좋은 지적. 나는 일할만한 것을 생각할 수 없다! –