0

お互いに使用したいPHPのクラスが2つありましたが、clothing_product.phpやdatabase.phpのような2つの異なるPHPスクリプトのクラスがあります。以下のようになります。

database.php:

require_once('config.php');

class MySqlDatabase
{
    private $connection;
    private $last_query;
    private $magic_quotes_active;
    private $real_escape_string_exist;

        function __construct(){
            $this->open_connection();
            $this->magic_quotes_active = get_magic_quotes_gpc();
            $this->real_escape_string_exist = function_exists("mysql_real_escape_string");

        }

        private function open_connection()
        {

            $this->connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
            if (!$this->connection){
                die("Connection failed!". mysql_error());
            }
            else{
                $db_select = mysql_select_db(DB_NAME);
                if(!$db_select){
                    die("Select database failed". mysql_error());
                }
            }

        }

        public function query($sql){

            $this->last_query = $sql;
            $result = mysql_query($sql,$this->connection);

            $this->confirm_query($result);
            return $result;

        }

        public function confirm_query($result){
            if(!$result){
                $output = "Database query failed: " . mysql_error()."<br /><br />";
                $output.= "Last query that fail is:" . $this->last_query;
                die($output);
            }
        }

        private function escape_value($value) {

            if ($this->real_escape_string_exist) {
                if($this->magic_quotes_active) {$value = stripslashes($value);}
                $value = mysql_real_escape_string($value);
            }
            else {
                if (!$this->magic_quotes_active) {$value = addslashes($value);}
            }
            return $value;
        }

        public function fect_array($result){
            return mysql_fetch_array($result);
        }

        public function num_rows($result){
            return mysql_num_rows($result);
        }

        public function last_id(){
            return mysql_insert_id($this->connection);
        }

        public function affected_rows(){
            return mysql_affected_rows($this->connection);
        }

        public function close_connection(){
            if(isset($this->connection)){
                mysql_close($this->connection);
                unset($this->connection);
            }
        }

}

//$db = new MySqlDatabase();

clothing_product.php:

include('../database.php');

class Clothing_Product {

    public $db = new MySqlDatabase();

        public static function test(){
            echo "Static call successfull";
            return "Static call successfull";
        }


    }

問題は、「Public $ db = new MySqlDatabase();」を使用しようとしたときです。クラスclothing_productでエラーが発生します。問題は多分私が間違った電話を受けたことだと思います。私を助けてくださいcuzmanoobthnk。

4

1 に答える 1

2

メンバー変数を静的でないものに初期化することはできません。ここでオブジェクトを作成しようとしています。

public $db = new MySqlDatabase();

マニュアルから:

この宣言には初期化が含まれる場合がありますが、この初期化は定数値である必要があります。つまり、コンパイル時に評価でき、評価するために実行時情報に依存してはなりません。

回避策は、コンストラクターで変数を設定することです。

public $db;
public function __construct() { 
    $this->db = new MySqlDatabase();
}
于 2013-01-23T14:21:53.477 に答える