2012-07-02 4 views
0

처음에는 3 개의 다른 AJAX 쿼리를 처리 할 PHP 파일이 3 개있었습니다.이 클래스를로드하는 방법 (정적/비 정적 메서드)?

나는 $ _POST 매개 변수를 가져 오는 고유 한 PHP 클래스를 만든 다음 3 개의 함수 중 1 개를 호출하기로 결정했습니다.

데이터베이스 쿼리 (base.php)에 대해서만 다른 PHP 클래스가 있습니다. 내 클래스에서이 파일을 AJAX 쿼리 (ajax.php)와 index.php 파일에 사용했습니다. 일부는 말할 $ajax = new Ajax();Class instance without variable 같은 변수에

<?php 
    new Ajax(); 

    class Ajax 
    { 
     private $base; 

     public function __construct() 
     { 
      include("base.php"); 
      $this->base = new Base(); 

      $script = $_POST["script"]; 

      $reference = $_POST["reference"]; 

      if($script == "correct" || $script == "insert") { 
       $ptGauche = json_decode($_POST["repGauche"]); 
       $ptDroite = json_decode($_POST["repDroite"]); 
      } 
      if($script == "insert") { 
       $txtGauche = json_decode($_POST["motGauche"]); 
       $txtDroite = json_decode($_POST["motDroite"]); 
      } 

      switch($script) 
      { 
       case "correct": 
        $this->correct($reference, $ptGauche, $ptDroite); 
        break; 
       case "insert": 
        $this->insert($reference, $ptGauche, $ptDroite, $txtGauche, $txtDroite); 
        break; 
       case "delete": 
        $this->delete($reference); 
        break; 
      } 
     } 

     private function correct($reference, $ptGauche, $ptDroite) 
     { 
      // code 
      $query_result = $this->base->selectAllQuery($reference); 
     } 

     private function insert($reference, $ptGauche, $ptDroite, $txtGauche, $txtDroite) 
     { 
      //code 
      $this->base->insertQuery($reference, $txtGauche, $txtDroite, $new_ptGauche, $new_ptDroite); 
     } 

     private function delete($reference) 
     { 
      //code 
      $this->base->deleteQuery($reference); 
     } 
    } 
?> 

분명히, 그것은 new Ajax();을 할 수있는 좋은 생각이 아니다 및 저장하지 클래스 인스턴스 :

내가 이런 걸 (ajax.php)을 작성했습니다 시작하려면 클래스 생성자 __construct에 부작용이있는 코드를 넣으려는 표준이 아니며 생성자와 함께 객체를 만드는 대신 정적 메서드를 사용해야하고 Ajax::functionToLoad();과 같은 작업을 수행해야합니다.

이 스크립트는 정적이 아닌 클래스를 사용하고 있기 때문에 스크립트에서는 작동하지 않으므로 내 속성 private $base;은 정적이 아니어야하며 "정적 함수는 다음과 같이 할 수 있기 때문에 데이터베이스 쿼리를 수행 할 수 없습니다. 't 액세스 비 정적 속성 "그래서/http://www.programmerinterview.com/index.php/c-cplusplus/can-static-function-access-non-static-members-of-class/

, 나는 비 정적 방법을 사용하고 대신 생성자를 사용하는 나는이 일을 해요 :

$ajax = new Ajax(); 
$ajax->loader(); 

class Ajax 
{ 
    private $base; 

    public function loader() 
    { 
     // code 
    } 

    // correct(), insert() and delete() functions 
} 

것은 확인이 작업을 수행하는 것입니다 아니면 다른 방식으로해야합니까?

답변

0

public function Ajax() ....는 __construct가없는 경우 기본 생성자입니다. 따라서 Ajax를 로더 대신 사용하거나 $ this-> loader();를 수행하는 Ajax 함수를 작성하십시오.

+0

감사를 다음과 같이 Ajax를 작동하지 않는 인스턴스에 액세스 할 수 있어야합니다() __construct와 동일합니까? 두 생성자 모두 Ajax()를 __constuct 대신 사용해야하는 이유는 무엇입니까? – baptx

0

당신이 싱글

라고 찾고있는
<?php 
class Ajax 
{ 
    private static $inst = new Ajax(); 

    private $base; 

    public static function getInstance(){ 
     return $inst; 
    } 

    public function __construct() 
    { 
     include("base.php"); 
     $this->base = new Base(); 

     $script = $_POST["script"]; 

     $reference = $_POST["reference"]; 

     if($script == "correct" || $script == "insert") { 
      $ptGauche = json_decode($_POST["repGauche"]); 
      $ptDroite = json_decode($_POST["repDroite"]); 
     } 
     if($script == "insert") { 
      $txtGauche = json_decode($_POST["motGauche"]); 
      $txtDroite = json_decode($_POST["motDroite"]); 
     } 

     switch($script) 
     { 
      case "correct": 
       $this->correct($reference, $ptGauche, $ptDroite); 
       break; 
      case "insert": 
       $this->insert($reference, $ptGauche, $ptDroite, $txtGauche, $txtDroite); 
       break; 
      case "delete": 
       $this->delete($reference); 
       break; 
     } 
    } 

    private function correct($reference, $ptGauche, $ptDroite) 
    { 
     // code 
     $query_result = $this->base->selectAllQuery($reference); 
    } 

    private function insert($reference, $ptGauche, $ptDroite, $txtGauche, $txtDroite) 
    { 
     //code 
     $this->base->insertQuery($reference, $txtGauche, $txtDroite, $new_ptGauche, $new_ptDroite); 
    } 

    private function delete($reference) 
    { 
     //code 
     $this->base->deleteQuery($reference); 
    } 
} 
?> 

이제 도와 주려고에 대한

<?php 
     $defaultInst = Ajax::getInstance(); 
?> 
+0

고마워, 아마도 정확하지는 않지만 AJAX 쿼리에만 사용되는 클래스이기 때문에 클래스 인스턴스 (여기서는 $ defaultInst)를 클래스 외부에서 사용할 필요가 없다. – baptx