2017-11-23 15 views
2

전역 범위 내에서 PHP로 명명 된 함수를 프로그래밍 방식으로 등록/생성 할 수 있습니까?프로그래밍 방식으로 PHP에서 명명 된 함수를 등록/생성

create_function (PHP 7 이상)에서 가능하며 요즘은 익명/람다 함수에서도 가능하지만 다시 호출하거나 변수 또는 객체 속성에 할당 한 다음 호출하면됩니다. 끝에 ()이 표시됩니다.

변수에 할당 할 필요가없고 $functionName으로 액세스 할 수있는 범위에 새 명명 된 함수를 추가 할 수 있다면 무엇이 좋을까요? 내가 무엇을 찾고

일부 솔루션은 다음과 같습니다

create_named_function('fullname', function($firstname, $lastname) { 
    return $firstname . ' ' . $lastname; 
}); 

그럼 내가 액세스 fullname(params...) 같은 거라고.

+5

이 일의 목적은 무엇입니까? – gogaz

+1

흥미로운 질문이지만, 실생활에서 사용하기에 해키합니다. –

+1

eval()이없는 방법을 생각할 수 없습니다. –

답변

0

이 작업을 수행해야하는지 잘 모르겠 으면 IDE에서 코드 및 코드 완성을 확인할 수있는 유용한 모든 종류의 작업을 중지합니다.

BUT ...

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

$body = <<< 'FN' 
<?php 
function fullname($firstname, $lastname) { 
    return $firstname . ' ' . $lastname; 
} 
FN; 

file_put_contents("func.php", $body); 
require "func.php"; 

echo fullname("Joe", "Bloggs"); 

첫 번째 부분은 필요한 코드를 가진 파일을 포함한다 (그들 치환되지 않고 변수의 포함을 허용 Nowdoc 문자열의 사용을주의) 만든다. 이것은 어떤 형태의 코드 생성이 될 수 있습니다.

1

여기 eval와 예 :

<?php 

$functionName = 'foo'; 
$f = ' 
    function ' . $functionName . '($a) { 
    var_dump($a); 
    } 
'; 
// Finger crossed!))) 
eval($f); 
// Now you have function "foo" in your global scope!) 
$functionName('bar'); 
// It will print 
// string(3) "bar" 

하지만 정말 까다로운 장소이기 때문에 당신은 ... 당신은 정말 여기에서 무엇을하고 있는지 명확한 비전을 가지고 있습니다 ...