PHP 中的動態屬性建立已被棄用:警告
P粉797855790
P粉797855790 2023-10-20 10:40:49
1
5
899

我越來越多地看到這種情況,但我不確定需要做什麼來阻止此警告:

已棄用:建立動態屬性...已棄用

這是我的課:

class database {

    public $username = "root";
    public $password = "password";
    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',
));

這給了我兩個訊息:

已棄用:建立動態屬性資料庫::$database 已棄用

已棄用:建立動態屬性資料庫::$server 已棄用


P粉797855790
P粉797855790

全部回覆(4)
P粉299174094

該警告告訴您您嘗試設定的屬性未在類別頂部列出

當您執行此命令時:

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

大致相當於這樣:

class database {

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

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

警告是類別定義中沒有行表示 $db->database$db->server 存在。

目前,它們將動態建立為非類型化公共屬性,但將來,您需要明確聲明它們:

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

在一些罕見的情況下,你實際上想說「這個類別的屬性是我決定在運行時添加的任何屬性」;在這種情況下,您可以使用#[AllowDynamicProperties] 屬性,如下圖所示:

#[AllowDynamicProperties]
class objectWithWhateverPropertiesIWant {
    public function __construct($params = array())
    {
        foreach ($params as $key => $value)
        {
            $this->{$key} = $value;
        }
    }
}
  • 回覆 啊啊大師傅
    徐涛 作者 2023-10-26 17:53:30
徐涛

山東省濱州市***工資搭嘎發撒***哈

P粉098979048

因此警告來自於新增動態類別屬性的建構子。如果您不必動態且真實地傳遞這些字段,那麼您似乎確實將簡單的事情變得過於複雜,那麼請像這樣嘗試。

class database {

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


$db = new database();

您需要動態參數有什麼原因嗎?您也可以這樣做:

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;
        }
    }
}

如果您提前新增參數,它們就不是動態的,您只是為已經存在的內容指派一個值。

現在應該可以正常工作,不會出現任何警告。

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

阿帆VS工作細胞宣傳部先擦VB

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!