2010-02-24 8 views
0

저는 PHP에 익숙하지 않아 많은 함수가 데이터베이스에 액세스해야한다는 것을 알았습니다. 내가 통과해야 함수 내에서 액세스 할 때PHP가있는 함수에서 데이터베이스 변수에 액세스

$db = new mysqli("localhost", "my_user", "my_password", "world"); 

내가 찾는 문제는 다음입니다 : 문제는 나는 현재 내가 지금처럼 모든 페이지의 상단에 필요 파일에 데이터베이스에 연결입니다 $ db 변수는 ... 잘 작동하지만 더 쉬운 방법이 있습니까?

답변

0

가장 쉬운 방법은 각 기능에 '글로벌'키워드를 추가하는 것입니다. 예 :

$db = new mysqli("localhost", "my_user", "my_password", "world"); 
function foo() { 
    global $db; 
    $db->query(.... 
} 

My_DB 클래스를 만들어 싱글 톤으로 정의하는 것이 훨씬 더 좋습니다. 그러면 db 객체를 My_DB의 인스턴스로 호출 할 수 있습니다.

class My_DB { 
    protected $_db = null; 

    protected static $instance = null; 

    protected function __construct() { 
    $this->_db = new mysqli("localhost", "my_user", "my_password", "world"); 
    } 

    public static function getInstance() { 
    if (empty(self::$_instance)) { 
     self::$_instance = new self(); 
    } 
    return self::$_instance; 
    } 
} 

그리고 어디 코드에서 당신이 할 수있는 다음

function foo() { 
    $db = My_DB::getInstance(); 
    $db->query(.... 
} 
+0

그 티켓. –

+0

정말 고마워 ... 두 번째는 '훨씬 낫다'는 말은 ... 장점이 무엇인지 물어봐도 될까요? – JimBo

+0

코드의 어느 부분에서나 전역 변수에 액세스 할 수 있으므로 일부 타사 라이브러리 (또는 코드)에서 재정의 할 수 있으므로 두 번째 방법이 더 좋습니다. 하지만 클래스를 다시 정의 할 수는 없습니다. 이로 인해 치명적인 오류가 발생합니다. – Ololo

0

$db 개체에서 함수로 호출 할 수 있습니다. $db->query(...).

+0

나는이 훨씬 ... 내 문제가 $의 DB를 점점 작동하지 이해 .. 내가이를 그 때마다 호출된다 함수 내가 전달하는 변수 중 하나로서 $ db를 추가해야합니다 ... 예를 들어 FunctionName ($ var1, $ var2, $ db); $ db에 액세스 가능하게하는 더 좋은 방법은 없을까요? – JimBo

+1

$ db를 전역 변수로 사용합니다. $ db를 정의한 include 파일을 함수의 범위를 벗어나면이 파일을 포함하는 모든 파일에서 사용할 수 있습니다. 좀 더 객체 지향적 인 방법을 원한다면 데이터베이스 핸들의 싱글 톤 인스턴스 변수 인 $ db를 생성하는 include를 가져야한다. –

+0

'데이터베이스 핸들의 싱글 톤 인스턴스 변수'에서 나를 잃어 버렸습니다. .. 좋은 소리지만 ... 내가 읽을 수있는 모든 웹 사이트? – JimBo

0

doctrine을 살펴보십시오. 약간의 진입로가 있지만 매우 좋습니다.

그렇지 않으면 해당 코드를 포함 파일에 넣고 페이지의 include "db.php";을 삽입하십시오. 귀하가 귀하의 사이트에 필요한 모든 것을 가져 오는 파일 1 개를 포함하고 있으며 여기에 $db 코드를 추가하는 것이 바람직합니다.

정말로 빠르고 더러운 경우 $db을 글로벌로 만든 다음 어디에서나 액세스 할 수 있습니다. 이것은 훌륭한 코딩 방법이 아닙니다.

관련 문제