Rumah  >  Soal Jawab  >  teks badan

Penciptaan harta dinamik dalam PHP ditamatkan: amaran

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粉797855790P粉797855790335 hari yang lalu906

membalas semua(5)saya akan balas

  • P粉299174094

    P粉2991740942023-10-21 10:14:38

    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
    0
  • 徐涛

    Ah, cikgu

    徐涛 · 2023-10-26 17:53:30
  • 徐涛

    徐涛2023-10-27 09:34:37

    Bandar Binzhou, Wilayah Shandong*** gaji sangat tinggi

    balas
    0
  • P粉098979048

    P粉0989790482023-10-21 10:03:08

    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',
    ));

    balas
    1
  • 徐涛

    徐涛2023-10-26 17:55:40

    Afan VS Jabatan Propaganda Sel Kerja sapu dulu VB

    balas
    0
  • Batalbalas