나는 정적 클래스 메서드를 가지고있다. 개체 변수 $ DB에 저장된 스크립트에 기존 데이터베이스 연결이 있습니다. 어떻게 그 정적 클래스 메서드를 호출하고 클래스 메서드에 매개 변수로 매번이 변수를 전달하지 않고 그 $ DB 개체를 사용할 수있게합니까? 예를 들어PHP : 기존 데이터베이스 연결을 정적 클래스 메서드에 전달하는 방법?
, 지금 나는 불행하게도, 글로벌을 사용하는 데 :
class Foo {
public static function Bar() {
global $DB;
return $DB->DSN_STRING;
}
}
그건 어떻게 든하지 않고 $의 DB 연결을 유도 할 수있는 일상적인 자신을 호출하는 내 정적 클래스가 필요 같은 그것을 다시 설정하십시오. 정적 클래스에 인스턴스를 삽입 할 수 없으므로 정적 클래스에 삽입 할 수 없습니다.
물론 정적 클래스에서 일반 클래스로 전환하고 내 $ Foo 객체를 인스턴스화하면 문제가 해결됩니다. 그런 다음 $ DB var을 공용 변수의 설정으로 삽입 할 수 있습니다. 또는 public 메서드를 추가하여 $ DB var을받은 다음 $ Foo 개체의 private var를 설정합니다. 또는 클래스 생성자가 $ DB var을 허용하고 $ Foo 객체의 private var를 설정합니다. 그러나 세 가지 기술 모두 정적 클래스에서 일반 클래스로 전환해야합니다.
일부 사람들은 레지스트리 패턴 또는 싱글 톤 패턴이라고도하는 것을 언급 한 적이 있습니다 (확실하지는 않습니다). 이 문제를 효율적으로 해결하는 데 필요한 것이 있습니까?
무엇보다도 나는 "global $ DB"라고 부르는 것을 피하는 이유는 사람들이 그것에 대해 괴롭힘을 당하기 때문입니다.
이것은 * 필자가 필요로하는 * * 정적 클래스가 그 안에 개체 지속성을 유지할 수 있다는 것을 깨닫지 못했습니다. – Volomike
좋은 시간은 싱글 톤. :) 도와 줘서 기뻐. – zombat