0

私は2つのクラスを持っています、そして私は快適さのためにもう1つ持っていたいです:)

だから私はデータベースとシステムのためのクラスを持っています。関数の3番目のクラスが欲しいのですが。SQLクエリがあるため、このクラスはデータベースの関数を使用する必要があります。これは私が終わったものです:

class database {
   public function __construct() {

      $this->mysqli = new mysqli('localhost', 'root', '', 'roids');
      $this->func = new functions();
        }
}

class functions {

    function __construct(){
        $db = new database();
    }

    public function banned() {
        $q = $db->select($this->prefix."banned", "*", "banned_ip", $this->getIP());

        if (0 == 0) {
            header('Location: banned.php'); // For testing
        }

    }
}

そして、私はこの種のバージョンがサイクルで終了します。解決策はありますか?どうもありがとう

4

1 に答える 1

1

一部のクラスはソースである必要があるため、他のクラスはそのインスタンスを使用する場合があります。

一例を示しましょう。

class DataBase { //THIS class is a source.
  public $mysqli ;

  public function __construct(){
    $this->mysqli = new mysqli('localhost', 'root', '', 'roids');
    $this->mysqli->set_charset("utf-8") ;
  }

  public function ready(){
    return ($this->mysqli instanceof MySQLi && $this->mysqli->ping()) ;
  }
}

class User {
  protected $db;
  public function __construct(DataBase $db){
    $this->db = $db ; //Now you can use your source
  }

  public function isBanned(){
    if ($this->db->ready()){
      $result = $this->db->mysqli->query("SELECT id FROM banned WHERE name='Hacker' ; ") ;
      return ($result && $result->num_rows >= 1) ;
    }
    return false ;
  }
}

次に、ソースをインスタンス化し、それをUserのインスタンスに渡します。

$database = new DataBase() ;
$user = new User($database) ;

これで、より複雑な関数を使用できます。

if ($user->isBanned()) exit("You are banned") ;

クラス関数を作成し、それをソースとして使用するのと同じ方法です(他のクラスがそれを使用する場合があります)。

于 2013-02-17T21:12:28.307 に答える