是否可以将类的属性设置为对象?作为对象的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