2010-05-12 4 views
0

저는 여전히 올바르게 구사할 수있는 방법을 찾고 있습니다. (저는 원어민이 아닙니다 ...). 싱글 톤 클래스에서 그 클래스의 메서드를 호출하는 함수를 호출하십시오.

그래서 나는 (분명한 이유) 싱글 패턴을 구현하는이 클래스 SQL을 가지고 있고 또한 SQL의 방법 중 하나를 사용하여 데이터베이스를 쿼리이 기능 checkUsr()을 보유하고 있습니다.

SQL 클래스에서 checkUsr()을 호출하지 않는 한 모든 것이 올바르게 작동합니다. 그렇게하면 스크립트가 종료되고 빈 페이지가 표시됩니다. 오류가 반환되지 않고 예외가 throw되지 않습니다 ... 어떻게됩니까? 그리고이 문제를 해결하려면 어떻게해야합니까?

편집 : 여기

일부 코드 : 나는 SQL 클래스 내에서 checkUsr를 호출 할 때

class SQL 
{ 
    public static function singleton() 
    { 
    static $instance; 
    if(!isset($instance)) 
     $instance = new SQL; 
    return $instance; 
    } 

    public function someOtherFun() 
    { 
    checkUsr(); 
    } 

    public function tryLoginAuthor($login, $sha1) 
    { 
    // SQL query 
    } 
} 

function checkUsr() 
{ 
    if (!isset($_SESSION['login']) || !isset($_SESSION['sha1'])) 
     throw new Exception('Not logged in', 1); 
    $SQL = SQL::singleton(); 
    $res = $SQL->tryLoginAuthor($_SESSION['login'], $_SESSION['sha1']); 
    if (!isset($res[0])) 
     throw new Exception('Not logged in', 1); 
} 

그래서 문제가 발생합니다. 그러나 다른 클래스에서 호출하면 발생하지 않습니다 ...

+0

일부 코드는 좋을 것입니다. $ this-> checkUsr()를 사용하여 checkUsr()을 호출하고 있습니까? – tplaner

답변

0

PHP에서 오류 메시지를 보려면 error_reporting을 켜야합니다. 그렇지 않으면 설명하는 빈 페이지가 표시됩니다. 생산 기계에 그것을 해제하는 것을 잊지 마세요

ini_set('display_errors', true); 
error_reporting(E_ALL | E_STRICT); 

, 이것은 단지 개발을위한 것입니다 : 당신의 index.php 파일의 맨 위에 ,이 포함되어 있습니다.

$ instance 변수는 내부 클래스 대신 함수 내부에서 정적 변수로 선언했습니다. 이들은 완전히 다른 두 가지입니다. 정적 변수 here의 사용법을 참조하고 정적 클래스 속성 here의 사용법을 참조하십시오. 당신은 후자가 필요합니다, 그래서 여기에 코드를 변경 : 싱글 매우 나쁜 생각으로

class SQL { 
    static $instance; 
    public static function singleton() 
     { 
     if(!isset(self::$instance)) 
      self::$instance = new SQL; 
     return self::$instance; 
     } 
... 

} 

는 SQL 클래스, 또는 데이터베이스 액세스의 어떤 종류를 구현, 장기적으로 매우 열심히 물린 것 . 귀하가 이 다른 데이터베이스를 지원해야한다는 사실이 밝혀지면 포럼과 같은 다른 DB에있는 포럼에서 정보를 가져와야하는 것처럼 심각한 문제가 발생할 수 있습니다.

+0

커스텀 에러 리포팅과 예외 처리를 사용합니다. 개발자의 환경에서는 무엇이든 출력 할뿐입니다. 그러나 가변 스코프에 대한 요점은 알지만 문제는 아닙니다. 나는 지금 당장 해결 방법으로 문제를 해결하고 나중에 더 자세히 살펴볼 것이다. 그러나 도움을 주셔서 감사합니다 - 싱글 톤 SQL 클래스를 사용하는 것에 동의하지 않지만 훨씬 긴 토론이 될 것입니다;) –

+0

싱글 톤 함수에 오류가 발생했습니다. 이제 해결되었습니다. –

관련 문제