是否可以將類的屬性設置爲對象?作爲對象的PHP屬性
像:
class User {
public $x = "";
public $y = new ErrorVO();
public $w = new array();
}
是否可以將類的屬性設置爲對象?作爲對象的PHP屬性
像:
class User {
public $x = "";
public $y = new ErrorVO();
public $w = new array();
}
在構造函數中,是的。
class User
{
public $x = "";
public $y = null;
public $w = array();
public function __construct()
{
$this->y = new ErrorVO();
}
}
編輯
KingCrunch取得了良好的一點:你不應該硬編碼的依賴性。您應該將它們注入到對象中(控制反轉(IoC))。
class User
{
public $x = "";
public $y = null;
public $w = array();
public function __construct(ErrorVO $y)
{
$this->y = $y;
}
}
new User(new ErrorVD());
你不能在屬性聲明宣佈他們,但你可以在構造__construct()
的array()
可以在public $w
被實例化,而不new
關鍵字實例化它們:public $w = array();
public function __construct()
{
$this->y = new ErrorVO();
}
是的,這是。實例化過程中
:
class B {
public $b;
}
$my_object = new B();
$my_object->b = (object)array(
'property' => 'test',
);
echo $my_object->b->property; // should also show 'test'
class A {
public $a;
public function __construct() {
$this->$a = (object)array(
'property' => 'test',
);
}
}
$my_object = new A();
echo $my_object->a->property; // should show 'test'
實例化之後,但是這是可以的類實例化過程中完成(構造函數)或更高版本,例如
你不能直接在構造函數或其他方法之外的類定義中分配對象,因爲你可以只用標量(例如。整數,字符串等)。
只是我的首選解決方案,即使別人已經說明一切:注射
class A {
public $a;
public function __construct (ErrorVO $a) {
$this->a = $a;
}
}
這樣可以使類可測試並允許更換想要ErrorVO
- 實施非常容易。當然你也可以這兩個解決方案合併成一個
class A {
public $a;
public function __construct (ErrorVO $a = null) {
$this->a = is_null($a) ? new ErrorVO : $a;
}
}
次要更新:在此期間,你可以這樣寫
class A {
public $a;
public function __construct (ErrorVO $a = null) {
$this->a = $a ?: new ErrorVO;
}
}
第二個例子中它更爲簡潔和國際海事組織它使意圖更加清晰。比較?:
-operator與MySQL COALESCE
謝謝,它會幫助很多=) – Gerep 2011-05-13 18:29:46
很好的例子。很有幫助。謝謝。 – 2015-04-10 16:52:32
謝謝,它會幫助很多=) – Gerep 2011-05-13 18:29:35