Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

Data Model Questions /

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

Overloading getters in DataObject not working

Go to End

4 Posts   2417 Views


Community Member, 4 Posts

4 August 2013 at 2:48am

Edited: 04/08/2013 2:50am

Calling $this->Property or $this->obj('Property') in DataObject overloaded method getProperty() results in [Notice] Undefined property: DataObject::$Property.

Interesting fact: Calling $this->Nonexistent (where Nonexistent is any undefined property) doesn't result in any Notice/Error whatsoever.


class News extends DataObject {
  public static $db = Array(
    'Title'  => 'Text',
    'Content'  => 'HTMLText',

  public function getTitle() {
    Debug::dump($this->Content); //works fine as we are not in getContent() method
    Debug::dump($this->AnythingUndefined); //doesn't cause any trouble, returns empty string
    return $this->Title; //source of the problem

using SilverStripe 3.0.5


Community Member, 473 Posts

4 August 2013 at 8:07am

That is PHP protecting you from infinite recursion, since $this->Title would end up calling $this->getTitle(), which would access $this->Title and call $this->getTitle() and so in.

To get the actual value, use $this->getField('Title'); Likewise, in setTitle($value), you'd use $this->setField('Title', $value);


Community Member, 4 Posts

4 August 2013 at 12:02pm

Edited: 04/08/2013 10:03pm

Thanks for the answer, it truly works, but it has a flaw. getField('Property') returns raw data, which means I can't do this for example:

public function getDate() {
    return $this->getField('Date')->Day();

since the getField('Date') doesn't return object Date.

Nevertheless tutorial at (section Overloading) is misleading and should be corrected imo.


Community Member, 791 Posts

3 December 2015 at 4:14am

Just bumping this. It seems this is still the case in 3.2