[英]PHP object instance of class [DateTime('@-1')] as constant in another class
我正在定義一個具有DateTime對象作為屬性之一的類。 我想將其默認值設置為-1的unix時間戳。 我還希望此默認值是恆定值,以便所有對象都知道其值。
但是我不想聲明類似const PROPERTY_DEFAULT_DATE = '-1';
因為該屬性將是一個DateTime對象以及使用該默認值的操作/函數,並且如果PROPERTY_DEFAULT_DATE不是正確的DateTime對象,則該屬性將難以處理
那么,我可以在另一個類中將某個類的特定對象實例作為常量嗎?
該值必須是一個常量表達式,而不是(例如)變量,屬性,數學運算結果或函數調用。
沒有提及,但是我認為這是不可能的(嘗試了很多變化,總是會出現語法錯誤)
如果不可能,我有什么選擇?
__construct()
設置什么默認值?
(不,請不要為NULL,我希望必須存在更優雅的解決方案)也請記住,它可能會用於類/子類中的操作/函數中
private $_DEFAULT_DATE
屬性和一個吸氣劑。
此屬性沒有設置器,因此可以確信它不會被更改。
(當然,我注意不要在類實現中更改它)
好吧,不幸的是,該手冊是正確的。 您不能將對象放入常量。 您可以將其設置為屬性,或者可以使用靜態函數;
YourClass::getDefaultDate(); // return DateTime('-1');
這是不可能的。 最簡單的選擇是使用靜態屬性,但這聽起來像您要確保此屬性不變。
因此,在這種情況下,唯一可行的方法是將靜態屬性設為私有,並添加一個返回DateTime對象的靜態函數。
但是,我仍然不希望您使用單個對象。 如果有任何其他方法請求此默認對象,他們將能夠對其進行修改,並且您可能會得到怪異的結果。 對這個方法的任何請求(在我看來)都應該收到一個新的或克隆的DateTime對象。
該手冊是正確的:不,您不能在PHP的const
表達式中使用對象。
如果要以這種方式使用它,則必須在構造函數中初始化一個適當的成員。 如果您希望它不可更改, 那么您可以做出一些努力 。
來自php.net的有關常量語法和使用的信息有人談到了對常量的“動態”分配。 什么? 沒有對常量的動態分配,運行時分配僅適用於變量。 讓我們以建議的示例為例:
<?php
/**
* Constants that deal only with the database
*/
class DbConstant extends aClassConstant {
protected $host = 'localhost';
protected $user = 'user';
protected $password = 'pass';
protected $database = 'db';
protected $time;
function __construct() {
$this->time = time() + 1; // dynamic assignment
}
}
?>
這些不是常量,而是類的屬性。 諸如“ this-> time = time()”之類的東西甚至會完全違反常量的目的。 常量應該在每次執行時就是常量值。 不應在每次運行腳本或實例化類時更改它們。
結論:不要嘗試將常量重新定義為變量。 如果常量不起作用,請使用變量。 然后,您不需要重新發明方法就可以實現已經存在的東西。
從自身出發:您可以使用私有靜態方法,也可以使用魔術方法__getStatic(因為僅從php 5.3起才有avaliablr),或者使用簡單的__get和property_exist或使用Reflection。 但是實際上我看不到需要此解決方案的問題。 對不起((
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.