2012-07-13 2 views
1

두 파일에서 동일한 함수를 정의하고 두 함수를 한 번에 호출 할 수 있습니까? 것 -PHP - 같은 함수 두 개를 호출 하시겠습니까? 가능한?

== File1.php의 ==

function my_function() { 
echo "File 1!"; 
} 

== File2.php의 ==

function my_function() { 
echo "File 2!"; 
} 

== File3.php의 ==

include('File1.php'); 
include('File2.php'); 
my_function(); 

출력 :

File 1! 
File 2! 

이것이 불가능합니다. 어떻게 해결할 수 있습니까?

감사합니다, 토마스 에드워즈

그것은 않을 것
+5

?우리에게 컨텍스트를 제공하면 가장 적절한 솔루션을 제공 할 수 있습니다 :) – F21

+0

왜 테스트하지 않습니까? –

+0

아니요, 불가능합니다. 무엇이 유용 할지도 모르겠습니다. – deceze

답변

1

당신은 전역 함수를 재정의 할 수 없습니다 (outside of runkit하지만 나쁜 부두의)는 그래서 옵션은 클래스 기반 솔루션을 사용하는 유지, 또는 다음과 같이 익명 함수는 솔루션을 구동.

당신은 함수 (큐 실행 단순히 또 다른 익명 함수 인 )를 호출 큐에 포함 된 모든 기능을 조립 쓸 수

:

function queueFunctions(array $functions){ 
    return function() 
    use ($functions) { 
     foreach($functions as $function) { 
      $function(); 
     } 
    }; 
} 

그리고 파일과 같은 각에서 익명 함수를 반환을 당신은 전역 함수 재정의하기보다는 설명 :

file1.php을

return function() { 
    echo 'Hello'; 
}; 
,

file2.php 그런

return function() { 
    echo 'World'; 
}; 

을 수행 할 수 있습니다 : 당신이 달성하려고하는 무엇

// both 
$function = queueFunctions([ 
    include('file1.php'), 
    include('file2.php'), 
]); 

$function(); // HelloWorld 

// one of them  
$function = queueFunctions([ 
    include('file2.php'), 
]); 

$function(); // World 

// repeated calls 
$function = queueFunctions([ 
    include('file2.php'), 
    include('file1.php'), 
    include('file2.php'), 
]); 

$function(); // WorldHelloWorld 
3

. 당신은 redclare 함수 오류를 얻을 것이다. 대신 클래스의 메서드를 사용해야하며 같은 이름을 사용할 수 있습니다.

1

아니요, 불가능합니다. 같은 기능을 두 번 호출했기 때문에 오류가 발생합니다.

2

두 방법 모두 동일한 서명이므로이 방법은 작동하지 않습니다. 즉, PHP는 먼저 호출 할 메소드를 알지 못하므로 오류가 발생합니다.

그러나 할 수있는 것은 동일한 이름을 가진 메소드가있는 오브젝트를 작성하고이를 목록에 저장 한 후 순환시킵니다.

다음은 테스트되지 않았지만 원칙이 있습니다.

// Abstract class acts as a common interface to allow using the same method name 
abstract class MyAbstract { 
    abstract function my_function(); 
} 

class FirstClass { 
    function my_function() { 
     echo "Class 1!"; 
    } 
} 

class SecondClass { 
    function my_function() { 
     echo "Class 2!"; 
    } 
} 

$objectArray[] = new FirstClass(); 
$objectArray[] = new SecondClass(); 

foreach($objectArray as $object){ 
    $object->my_function(); 
} 
+0

@deceze 편집 해 주셔서 감사합니다.) –

관련 문제