2011-08-16 5 views
2

질문을 올바르게 표현했는지 설명하지는 못했지만 설명해 드리겠습니다. 절차 프로그램에서 예를 들면 다음과 같습니다.객체 지향 PHP에서 함수를 사용하기 전에 함수를 정의해야합니까?

function getUserId() 
{ 
    // some stuff 
    return $someUserId; 
} 

function getUsername() 
{ 
    $id = getUserId(); 
    $query = mysql_query(" SELECT * FROM users WHERE id = '$id' "); 
    while ($row = mysql_fetch_assoc($query)) 
    { 
    return $row['username']; 
    } 
} 

위의 getUsername 함수는 getUserId 함수를 호출했습니다. 그 함수가 호출 되었기 때문에 호출 한 함수 위에 있어야합니다. 그렇지 않으면 작동하지 않습니다.

객체 지향 프로그래밍에서 클래스의 함수 (메소드) 순서가 중요하다는 것을 알고 싶습니다. 호출되는 메소드가 스크립트에서 더 아래로 정의되어 있어도 다른 메소드 내에서 메소드를 호출 할 수 있습니까?

답변

0

절차 형 스타일 함수에서도 을 순서대로 선언 할 필요는 없습니다. 그들은 호출 될 때 존재할 필요가 있습니다. 어떤 함수도 실제로 호출되지 않기 때문에 완벽하게 작동합니다.

OOP의 경우와 마찬가지로 호출 될 때 함수가 있어야합니다. 그들이 선언 된 순서는 부적합합니다.

3

기술적 인 관점에서 볼 때 전혀 문제가되지 않습니다. 중요한 것은 가독성과 수정 용이성입니다. 따라서 자신에게 가장 적합한 것이 무엇인지 결정하는 것은 당신에게 달려 있습니다. 함수를 연대순으로, 알파벳순으로, 때로는 목적에 따라 순서대로 정렬 할 수 있습니다. IMHO, 가장 좋은 방법은 사전 순으로 정렬하는 것입니다. 코드 탐색 도구에서 알파벳을 쉽게 검색 할 수 있습니다.

0

모든 순서로 논리적으로 호출 할 수 있습니다. 일부 언어는 선언 순서를 달리 할 수도 있고 그렇지 않을 수도 있습니다. 그러나 루트에서, 당신이 많은 함수 나 메소드를 선언하는 코드의 모듈/클래스/덩어리를 사용한다면, 당신은 그것들을 완전히 지저분하게 호출 할 수 있습니다. 여러 가지 이유로

4

문제가되지 않는 함수의 순서 :

  1. 컴파일러가 아직 존재하지 않을 수도 기능 "예견"할 수 있도록 방법은, 컴파일시에 실행되지 않습니다. (참고 : 이것은 지나치게 단순화입니다 ...)
  2. PHP는 컴파일 할 때에 의 함수가 없어도 동적 언어입니다. 런타임 중에 동적으로로드 할 수 있습니다.
  3. PHP는 메서드를 이름으로로드하므로 런타임 중에 이름과 일치하는 메서드를 찾습니다.

제 경우의 예이다 :이 존재하면 MyObject 클래스의 인스턴스 오브젝트 $object에, 상기 방법 my_method를 호출

$object = new MyObject(); 
$method = 'my_method'; 
echo $object->${my_method}(); 

. 이 메소드가 존재하지 않으면 런타임 예외가 발생합니다.

1

언어에 따라 다릅니다.

예를 들어 JavaScript에서는 getUserId() 함수가 정의 된 후에 getUsername() 함수가 먼저 호출되는 한 먼저 정의 할 수 있습니다.

Java에서 또 다른 예로, 일반적으로 중요하지 않습니다 (정적 초기화 블록 제외)

관련 문제