2016-09-17 6 views
-1

ウェブ内のサイトが読み込まれたときにすべてのクラスを読み込むクラスを作成しようとしています。ウェブページの読み込み時にすべてのPHPクラスを呼び出す

<?php 

include_once filter_input(INPUT_SERVER, "DOCUMENT_ROOT") . "/Config.inc.php"; 

class Connection extends Conf{ 

    private static $connection; 
    private static $config; 

    public function __construct(){ 
     $this->config = new Conf; 
    } 

注:ここでは、私がロードするクラスを持っていることをクラスは、パブリック、データが保護されていない取得するメソッドのでコンファレンス(のconfig.inc.phpファイル)を拡張します。

そしてまた、私は次のクラスをロードしたい:

<?php 

/* 
* 
* El contenido de este archivo está protegido y para incluirse debe extenderse a la clase Config 
* 
*/ 

Class Conf { 

    private static $db_server = "server"; 
    private static $db_user = "username"; 
    private static $db_pass = "password"; 
    private static $db_maindb = "database"; 

    private static $server_folder = "folder"; 

    public function __construct(){ 

     $this->db_server = "server"; 
     $this->db_user = "username"; 
     $this->db_pass = "password"; 
     $this->db_maindb = "database"; 

     $this->server_folder = "folder"; 

    } 

私はそれがこのようなものだと確信している:

class Builder { 
public function build(){ 
    Connection::__construct(); 
    Conf::__construct(); 
} 
} 

しかし、それは動作しません。いくつかの助けてください?

答えて

0

ここでは、静的変数とクラス変数を混​​在させています。

$ thisを使用してクラスの静的変数を設定しようとしていますが、これはクラスのインスタンスに関連しています。あなたは::自己を使用する必要があります静的変数を設定するには、__construct内部 - あなたはクラスすなわちのインスタンスを作成するときに呼び出される:あなたはコンファレンスを拡張しているよう

また
<?php 
$blah = new Conf(); 

、あなたの最初クラッセは、奇妙ですコンストラクタでその新しいインスタンスを作成することもできます。

私は、あなたの変数のすべてを定数として設定ファイルに定義し、次にそれらの定数をコンストラクタのパラメータとして渡して再利用できるようにする新しいconfigクラスを作成することができます後で。このような

config.inc.phpを

​​

そして、あなたのクラス:

<?php 


include_once filter_input(INPUT_SERVER, "DOCUMENT_ROOT") . "/Config.inc.php"; 


class Connection 
{ 

    private $connection; 
    private $config; 

    public function __construct(Config $config) 
    { 
     $this->config = $config; 
    } 

    public function connect() 
    { 
     $this->connection = new mysqli($this->config->getServer(), $this->config->getUsername(), $this->config->getPassword(), $this->config->getDatabase()); 
    } 
} 


    class Config 
    { 

     private $server; 
     private $username; 
     private $password; 
     private $database; 

     /** 
     * @return mixed 
     */ 
     public function getServer() 
     { 
      return $this->server; 
     } 

     /** 
     * @param mixed $server 
     */ 
     public function setServer($server) 
     { 
      $this->server = $server; 
     } 

     /** 
     * @return mixed 
     */ 
     public function getUsername() 
     { 
      return $this->username; 
     } 

     /** 
     * @param mixed $username 
     */ 
     public function setUsername($username) 
     { 
      $this->username = $username; 
     } 

     /** 
     * @return mixed 
     */ 
     public function getPassword() 
     { 
      return $this->password; 
     } 

     /** 
     * @param mixed $password 
     */ 
     public function setPassword($password) 
     { 
      $this->password = $password; 
     } 

     /** 
     * @return mixed 
     */ 
     public function getDatabase() 
     { 
      return $this->database; 
     } 

     /** 
     * @param mixed $database 
     */ 
     public function setDatabase($database) 
     { 
      $this->database = $database; 
     } 

     /** 
     * @return string 
     */ 
     public function getServerFolder() 
     { 
      return $this->server_folder; 
     } 

     /** 
     * @param string $server_folder 
     */ 
     public function setServerFolder($server_folder) 
     { 
      $this->server_folder = $server_folder; 
     } 

     private $server_folder; 

     public function __construct($server, $username, $password, $database) 
     { 

      $this->server = $server; 
      $this->username = $username; 
      $this->password = $password; 
      $this->database = $database; 

      $this->server_folder = "folder"; 

     } 
    } 

そして、最終的にそれを使用します

<?php 

    $config = new Config($server, $username, $password, $database); 

    $connection = new Connection($config); 
+0

うわー!チュートリアルをありがとう。私はJavaに似た方法を使う必要があると思っていました。静的なxDとして参照するのではなく、関数を使って呼び出してください。 –

+0

また、グローバル定数として定義すると、Webページの読み込み中にアクセスできます。私は彼らにアクセスするための拡張の必要性のために私の道を守ります。つまり、保護された関数は、召喚されるためには拡張が必要な​​関数です。その後、オリジナルではないページからアクセスするか、オリジナルを拡張するページからアクセスして、召喚することは不可能になります。私は可能な限り私のサイトを最も安全に保つために努力しています:P –

+0

Webページがロードされているときに何を意味するのかわかりません。 –

0

エラーをあなたのコードに、

最初にstaチックの特性を介してアクセスすることができません - >演算子

  $this->db_server = "server"; 
     $this->db_user = "username"; 
     $this->db_pass = "password"; 
     $this->db_maindb = "database"; 

     $this->server_folder = "folder"; 

は自己を使用してみてください::静的メンバーの

 self::$db_server = "server"; 
    self::$db_user = "username"; 
    self::$db_pass = "password"; 
    self::$db_maindb = "database"; 

    self::$server_folder = "folder"; 

を動作するようにあなたはそれが希望、クラスが宣言されるたびになるようspl auto loaderに見たいと思うかもしれませんロード・ファイルに自動的に、あなたは文句を言わない自分でクラスを含める必要が

<? // scInit.php 
    define("SC_ROOT", dirname(__FILE__) ."/"); 
    define("SC_PREFIX", "sc"); 
    define("SC_EXTENSION", ".php"); 
    spl_autoload_register(
      function ($namespace) { 
       $parts=explode('\\', $namespace); 
       $class_name= end($parts); /// break namespaces and take last part as class name. 

       $fileDirectory = array("model", "view", "controller", "admin", "registry"); // Directories to look for the class file 
       foreach ($fileDirectory as $directory) { 
        $classFileName = SC_ROOT .$directory."/". SC_PREFIX . $class_name . SC_EXTENSION; 
        if (file_exists($classFileName)) { 
         include_once($classFileName); 
        } 
       } 
     }); 

<?php 
//index.php 

namespace project\admin; 
include_once("scInit.php"); 

use project\model\TimeStamp; 

$con= new TimeStamp(); 

/* class TimeStamp is not loaded so now it will run spl_autoloader before generating fatal error passing project\model\TimeStamp as parameter. 
spl_autoloader will look for scTimeStamp.php in all directories defined in autoload function. 

*/ 

そして、あなたはmysqlの接続資格情報を読み込もうとしていると仮定しています。一度DBConにアクセスしてください。

関連する問題