Penciptaan harta dinamik dalam PHP ditamatkan: amaran
P粉797855790
P粉797855790 2023-10-20 10:40:49
1
5
1005

Saya semakin banyak melihat perkara ini, tetapi saya tidak pasti apa yang perlu dilakukan untuk menghentikan amaran ini:

DILARANG: Mencipta sifat dinamik... DILARANG

Ini kelas saya:

class database {

    public $username = "root";
    public $password = "password";
    public $port = 3306;

    public function __construct($params = array())
    {
        foreach ($params as $key => $value)
        {
            $this->{$key} = $value;
        }
    }
}

Beginilah cara saya membuat seketika.

$db = new database(array(
    'database' => 'db_name',
    'server' => 'database.internal',
));

Ini memberi saya dua mesej:

DILARANG: Cipta pangkalan data sifat dinamik::$database Ditamatkan

DILARANG: Cipta pangkalan data sifat dinamik::$server Ditamatkan


P粉797855790
P粉797855790

membalas semua(4)
P粉299174094

Amaran ini memberitahu anda bahawa harta yang anda cuba tetapkan tidak disenaraikan di bahagian atas kelas.

Apabila anda menjalankan arahan ini:

class database {

    public $username = "root";
    public $password = "pasword";
    public $port = 3306;

    public function __construct($params = array())
    {
        foreach ($params as $key => $value)
        {
            $this->{$key} = $value;
        }
    }
}

$db = new database(array(
    'database' => 'db_name',
    'server' => 'database.internal',
));

kira-kira bersamaan dengan ini:

class database {

    public $username = "root";
    public $password = "pasword";
    public $port = 3306;
}

$db = new database;
$db->database = 'db_name';
$db->server = 'database.internal';

Amarannya ialah tiada baris dalam definisi kelas yang menunjukkan bahawa $db->database$db->server wujud.

Pada masa ini, ia dicipta secara dinamik sebagai harta awam yang tidak ditaip, tetapi pada masa hadapan, anda perlu mengisytiharkannya secara eksplisit:

class database {
    public $database;
    public $server;
    public $username = "root";
    public $password = "pasword";
    public $port = 3306;

    public function __construct($params = array())
    {
        foreach ($params as $key => $value)
        {
            $this->{$key} = $value;
        }
    }
}

$db = new database(array(
    'database' => 'db_name',
    'server' => 'database.internal',
));

Dalam beberapa kes yang jarang berlaku, anda sebenarnya ingin mengatakan "sifat kelas ini ialah apa jua sifat yang saya putuskan untuk tambah semasa masa jalan"; dalam kes itu, anda boleh menggunakan atribut #[AllowDynamicProperties] seperti ini:

#[AllowDynamicProperties]
class objectWithWhateverPropertiesIWant {
    public function __construct($params = array())
    {
        foreach ($params as $key => $value)
        {
            $this->{$key} = $value;
        }
    }
}
  • balas Ah, cikgu
    徐涛 pengarang 2023-10-26 17:53:30
徐涛

Bandar Binzhou, Wilayah Shandong*** gaji sangat tinggi

P粉098979048

Jadi amaran datang daripada pembina yang menambah sifat kelas dinamik. Nampaknya anda membuat sesuatu yang mudah terlalu rumit jika anda tidak perlu melepasi medan secara dinamik dan tulen, jadi cuba sesuatu seperti ini.

class database {

    public $username = "root";
    public $password = "pasword";
    public $port = 3306;
    public $database = 'db_name';
    public $server = 'database.internal';
}


$db = new database();

Adakah ada sebab mengapa anda memerlukan parameter dinamik? Anda juga boleh melakukan ini:

class database {

    public $username = "root";
    public $password = "pasword";
    public $port = 3306;
    public $database;
    public $server;

    public function __construct($params = array())
    {

        foreach ($params as $key => $value)
        {
            $this->{$key} = $value;
        }
    }
}

Jika anda menambah parameter lebih awal daripada masa, ia tidak dinamik, anda hanya memberikan nilai kepada sesuatu yang sudah ada.

Ia sepatutnya berfungsi tanpa sebarang amaran.

$db = new database(array(
    'database' => 'db_name',
    'server' => 'database.internal',
));
徐涛

Afan VS Jabatan Propaganda Sel Kerja sapu dulu VB

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan