我实际上在学习Symfony3,虽然我设置了对象字段的默认值,但我发现我无法将DateTime对象设置为默认值,这是我从跟随教程中学到的常用方式参考下面的代码)。设置Symfony对象的默认值的最佳方法是什么?
<?php
namespace UTM\UsersBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* User
*
* @ORM\Table(name="utm_users", uniqueConstraints={@ORM\UniqueConstraint(name="uuid", columns={"uuid"}), @ORM\UniqueConstraint(name="username", columns={"username"})}, indexes={@ORM\Index(name="group_id", columns={"group_id"})})
* @ORM\Entity
*/
class User
{
//...
private $var = 'value';
//...
}
所以我找了一个解决方案,我发现我可以使用构造函数来实现这一点,所以我做了下面的代码。
<?php
namespace UTM\UsersBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* User
*
* @ORM\Table(name="utm_users", uniqueConstraints={@ORM\UniqueConstraint(name="uuid", columns={"uuid"}), @ORM\UniqueConstraint(name="username", columns={"username"})}, indexes={@ORM\Index(name="group_id", columns={"group_id"})})
* @ORM\Entity
*/
class User
{
//...
private $var;
//...
public function __construct() {
$this->setVar(new DateTime('0000-00-01 00:00:00'));
}
//...
}
但现在我想知道什么是设置对象的默认值的最佳方法。使用__construct函数还是更好一些,或者这两种方法的组合是最好的方法。
谢谢你的阅读,我希望有人会为我提供这个问题的答案。
使用'__constructor'允许使用更多。正如您所看到的,根据您的PHP版本分配对象或常量是有问题的。同样使用ctor允许您在实例化时覆盖“默认”。这可能值得一读(原型模式):http://ralphschindler.com/2012/03/09/php-constructor-best-practices-and-the-prototype-pattern – ficuscr