2011-08-17 2 views
2

나는 두 개의 클래스 A, B가 있고 하나는 다른 클래스를 확장하지 않지만 두 개의 클래스가 분리되어 있지만 둘 다 스크립트에로드 되어도 여전히 A에서 B의 함수를 참조 할 수 있습니까?클래스 TWO에서 클래스 ONE의 함수를 확장하지 않고 호출 하시겠습니까?

class A { 
    function one() { 
     echo "Class A"; 
    } 
} 

class B { 
    function two() { 
     echo "Class B"; 
     A::one(); 
    } 
} 


$a new A; 
$b = new B; 

$b->two(); 
+0

가능한 [클래스 A의 객체를 사용하여 비 관련 클래스 B에서 클래스 A의 액세스 기능] (http://stackoverflow.com/questions/7101204/access-function-in-class-a-from-non- class-b-using-a-object-of-class-a) – hakre

+0

당신은 네임 스페이스를 설정하는 방법으로 클래스를 사용하려는 실수를하지 않았습니까? 그것은 아주 나쁜 생각이기 때문입니다. – staticsan

답변

0

하나를 정적으로 정의 할 수 있지만 그 이유는 무엇입니까?

+0

나는 20의 모든 파일에 이것을 넣어야하므로 "$ b-> two();" 5 줄 길이의 모든 것보다. – Poemm

1

다음과 같이 정의 할 수 있습니다.

class A { 
    public static function one() { 
     echo "Class A"; 
    } 
} 

class B { 
    function two() { 
     echo "Class B"; 
     A::one(); 
    } 
} 


$a new A; 
$b = new B; 

$b->two(); 
+0

나를 위해 작동하지만 지금은이 함수에 $ this가 있고 정적 때문에 더 이상 작동하지 않으므로 $ this없이 같은 클래스 안에 변수를 호출하는 방법이 있습니까? – Poemm

+0

실제로 그 말은 "비회원의 멤버 함수 one() 호출" – Poemm

2

네, 그렇게 할 수 있습니다. 그러나 호출 표기법을 사용하려면 A 클래스의 one() 함수를 static으로 선언해야합니다. (이 그것을 클래스 메소드 수 있습니다.)

다른 대안은, 코드의 마지막 줄에 의해 제안, 예를 $a에서 함수를 호출 할 인스턴스 $b입니다. 이러한 함수를 인스턴스 메서드이라고하며 일반적으로 개체와 상호 작용하는 방식입니다. 이 메소드에 액세스하려면 public으로 선언해야합니다. private으로 선언 된 메서드는 해당 클래스 내의 다른 메서드에서만 호출 할 수 있습니다.

코드에서 인스턴스 메서드를 호출하는 데는 여러 가지 방법이 있습니다. 이 함수에 대한 매개 변수로 $a에 전달할 수있는 확실한 두 가지가 있거나 메서드 내에 A 클래스의 인스턴스를 만들 수 있습니다.

실제로 달성하려는 것은 무엇입니까?

관련 문제