it-source

PHP에서 함수의 별칭을 지정하는 방법은 무엇입니까?

criticalcode 2023. 8. 4. 23:08
반응형

PHP에서 함수의 별칭을 지정하는 방법은 무엇입니까?

PHP에서 다른 이름으로 함수의 별칭을 지정할 수 있습니까?이름을 가진 함수가 있다고 가정합니다.sleep에일리어스를 만들 수 있는 방법이 있습니까?wait?

지금쯤 저는 이렇게 하고 있습니다.

function wait( $seconds ) {
    sleep($seconds);
}

PHP 5.5까지

네.function wait ($seconds) { sleep($seconds); }가는 길입니다.그러나 wait()를 변경해야 하는 경우 sleep()에 대한 매개 변수 수를 변경해야 하는 경우 대신 다음을 수행하는 것이 좋습니다.

function wait() { 
  return call_user_func_array("sleep", func_get_args());
}

PHP 5.6+만 해당

PHP 5.6부터는 함수를 가져와서 별칭을 지정할 수 있습니다.

use function sleep as wait;

설명서에도 예제가 있습니다("함수 별칭 지정" 참조).

아니요, 하지만 당신은 할 수 있습니다.

$wait = 'sleep';
$wait($seconds);

이러한 방식으로 인수-번호-문제도 해결할 수 있습니다.

당신이 PHP 5.3을 가지고 있다면 람다스도 볼 수 있습니다.

$wait = function($v) { return sleep($v); };

만약 당신이 PHP의 "eval" 명령어를 사용하는 것에 관심이 없다면 (많은 사람들이 실제로 문제가 있지만 나는 그렇지 않다), 다음과 같은 것을 사용할 수 있습니다.

function func_alias($target, $original) {
    eval("function $target() { \$args = func_get_args(); return call_user_func_array('$original', \$args); }");
}

몇 가지 간단한 테스트에서 사용했는데, 꽤 잘 작동하는 것 같았습니다.다음은 예입니다.

function hello($recipient) {
    echo "Hello, $recipient\n";
}

function helloMars() {
    hello('Mars');
}

func_alias('greeting', 'hello');
func_alias('greetingMars', 'helloMars');

greeting('World');
greetingMars();

아니요, PHP에서는 이것을 빠르게 할 수 있는 방법이 없습니다.이 언어는 래퍼 함수를 작성하지 않고 함수에 별칭을 지정하는 기능을 제공하지 않습니다.

만약 당신이 정말로 이것이 필요하다면, 당신은 이것을 할 수 있는 PHP 확장자를 쓸 수 있습니다.그러나 확장자를 사용하려면 확장자를 컴파일하고 PHP를 이 확장자로 구성해야 하므로 응용 프로그램의 이식성이 크게 저하됩니다.

아니요, 기능은 1등 시민이 아니기 때문에 없습니다.wait = sleep예를 들어 Javascript와 같은.당신은 기본적으로 당신의 질문에 입력한 것을 해야 합니다.

function wait ($seconds) { sleep($seconds); }

런킷 확장을 사용할 수 있습니다.

http://us.php.net/manual/en/function.runkit-function-copy.php

function alias($function)
{
    return function (/* *args */) use ($function){
        return call_user_func_array( $function, func_get_args() );
    };
}

$uppercase = alias('strtoupper');
$wait      = alias('sleep');

echo $uppercase('hello!'); // -> 'HELLO!'

$wait(1); // -> …

PHP가 xasy 구문 사용을 지원하지 않는 경우 이전 PHP 버전에서 익명 함수를 정의할 수 있습니다.

$wait = create_function('$seconds', 'sleep($seconds);');
$wait(1);

또는 상수 내부에 코드를 배치합니다. 예:

define('wait', 'sleep(1);');
eval(wait);

참고 항목:eval() 대신 사용할 수 있는 것은 무엇입니까?

이 기능은 코드 조각이 길어서 반복하지 않으려는 경우나 코드가 새 기능에도 유용하지 않은 경우에 특히 유용합니다.


사용자 함수의 별칭을 만드는 데 매우 유용한 Dave H가 게시한 함수도 있습니다.

function create_function_alias($function_name, $alias_name) 
{ 
    if(function_exists($alias_name)) 
        return false; 
    $rf = new ReflectionFunction($function_name); 
    $fproto = $alias_name.'('; 
    $fcall = $function_name.'('; 
    $need_comma = false; 

    foreach($rf->getParameters() as $param) 
    { 
        if($need_comma) 
        { 
            $fproto .= ','; 
            $fcall .= ','; 
        } 

        $fproto .= '$'.$param->getName(); 
        $fcall .= '$'.$param->getName(); 

        if($param->isOptional() && $param->isDefaultValueAvailable()) 
        { 
            $val = $param->getDefaultValue(); 
            if(is_string($val)) 
                $val = "'$val'"; 
            $fproto .= ' = '.$val; 
        } 
        $need_comma = true; 
    } 
    $fproto .= ')'; 
    $fcall .= ')'; 

    $f = "function $fproto".PHP_EOL; 
    $f .= '{return '.$fcall.';}'; 

    eval($f); 
    return true; 
}

아니요. 당신이 쓴 방법이 그것을 하는 가장 좋은 방법입니다.

아니요, 그렇게 하는 빠른 방법은 없습니다 - 적어도 PHP v5.3 이전의 어떤 것에 대해서도, 그렇게 하는 것이 특별히 좋은 생각은 아닙니다.그것은 단순히 문제를 복잡하게 만듭니다.

PHP 5.6 이후

이것은 특히 마술 방법이 있는 수업에서 사용하는 데 도움이 됩니다.

class User extends SomethingWithMagicMethods {
    
    public function Listings(...$args) {
        return $this->Children(...$args);
    }

}

하지만 저는 그것이 일반적인 기능에도 작동한다고 꽤 확신합니다.

function UserListings(...$args) {
    return UserChildren(...$args);
}

출처: PHP: 새로운 기능 -> "Variadic functions via..."

다른 방법:

...을 사용하여 변수 인수 액세스

<?php

function wait(...$args) {
  // Unpack the arguments
  sleep(...$args);
}

?>

이렇게 하면 원래 함수를 호출하는 방식과 마찬가지로 별칭을 호출할 수 있습니다.함수가 둘 이상의 인수를 허용하는 경우.

오래된 일인 건 알지만 언제든

$wait = 'sleep';
$wait();

우리 반에서 사용한 것

function __call($name, $args) {
    $alias['execute']=array('done','finish');
    $alias['query']=array('prepare','do');
    if (in_array($name,$alias['execute'])){
        call_user_func_array("execute",$args);
        return TRUE;
    }elseif(in_array($name,$alias['query'])){
        call_user_func_array("query",$args);
        return TRUE;
    }
    die($this->_errors.' Invalid method:'.$name.PHP_EOL);
}

언급URL : https://stackoverflow.com/questions/1688711/how-to-alias-a-function-in-php

반응형