【问题标题】:Writing model methods in Doctrine在 Doctrine 中编写模型方法
【发布时间】:2010-07-28 22:06:31
【问题描述】:

我想通过在模型类定义中包含方法来封装特定于某些模型的功能。所以,例如:

abstract class BaseUser extends DoctrineRecord {    

    public function setTableDefinition(){  
       //etc.  
    }  

    public function setUp(){  
       //etc.  
    } 

    public function getName(){  
       return $this->name  
    }
}

$this->name 和 $name 一样会抛出错误。 是否可以从这里访问模型属性?

【问题讨论】:

  • 我认为$this->name 之后缺少的; 只是问题中的拼写错误?

标签: php orm doctrine


【解决方案1】:

可以使用 $this->propertyName 访问属性,正如任何人所期望的那样。我的问题是 getProperty(在我的示例中为 getName)是 Doctrine 框架自动创建的一个函数,当我尝试创建自己的时会产生冲突。我将名称更改为 whatIsName() 并且一切正常。

【讨论】:

    【解决方案2】:

    Basexxx 类是抽象的。您应该将您的方法添加到扩展 BaseUserUser 类中。

    [编辑] 您可以使用$this->property 访问子类中基类的属性。例如:

    class User extends BaseUser {
       public function getWelcomeString() {
          return 'Welcome, ' . $this->name . '!';
       }
    }
    

    然后您可以从您的 chilod 类的实例访问您的自定义函数以及所有基类属性:

    $user = new User();
    //Hydrate object from database
    echo $user->getWelcomeString();     // implemented in your child class
    echo 'Your name is ' . $user->name; // implemented in the base class
    

    【讨论】:

    • 你是对的 - 谢谢。你知道我如何从这些函数中访问模型属性吗?感谢您的帮助。
    • @Justin:我已经用一个例子更新了我的答案。由于您是 SO 的新手,因此我会提醒您通过单击答案左侧的复选标记来接受最佳答案。
    • 再次感谢。不幸的是,这正是我一直在尝试的,但是抛出了一个错误,内容为:“未定义的属性:用户::$name”。但我肯定正确地定义了列,因为 $user->name 按预期返回。只是 $user->getName() 抛出了错误。
    • 抱歉,“Undefined::Property”是解释器警告,而不是错误。尽管如此,由于命名冲突(见下文),它无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 2021-10-15
    相关资源
    最近更新 更多