Strange Problem

Ok so I was working on someone else’s website. I suddenly got a “Error 500 Trying to get property of non-object” The function where this error appeared was in the following function. The fact that it appeared at all was really strange because I hadn’t changed anything in this function or anything related to it…


// Haal personeelscode op van opdrachtgever

	public function getOpdrachtgeverCode() {

		$opdrachtgever = Personeelslid::model()->findbyPk($this->opdrachtgever);

		$code = '<span title="';

		$code .= $opdrachtgever->voornaam . ' ' . $opdrachtgever->familienaam;

		$code .= '">';

		$code .= $opdrachtgever->{'pers-code'};

		$code .= '</span>';

		return $code;

	}

after some trial and error bugfixing I finally got it working again by making the code like this;


// Haal personeelscode op van opdrachtgever

	public function getOpdrachtgeverCode() {

		$opdrachtgever = Personeelslid::model()->findbyPk($this->opdrachtgever);

		$code = '<span title="';

		$code .= $opdrachtgever['voornaam'] . ' ' . $opdrachtgever['familienaam'];

		$code .= '">';

		$code .= $opdrachtgever['pers-code'];

		$code .= '</span>';

		return $code;

	}

But I have NO IDEA why this does work, and the first bit of code didn’t anymore. Especially since it had worked perfectly for a year before I started working on the site…

Anybody has a clue as to why the first function would suddenly stop working?

If Personeelslid::model()->findbyPk($this->opdrachtgever) does not find an AR instance with PK $this->opdrachtgever it returns null.

Subsequently $opdrachtgever->voornaam fails with “Trying to get property of non-object” because null is not an object. But due to PHP’s dynamic typing (I guess) accessing an index of a variable which is null is no problem.




$a = null;

echo $a['index'];



IMO you should cover the case when findbyPk does not return an AR instance.

HTH,

– David

the problem is that Personeelslid::model()->findbyPk($this->opdrachtgever); doesn’t find anything.

You should investigate how is possible that the model related does not exists.

If is normal that the related object can miss, do like that:




  public function getOpdrachtgeverCode() {

                $opdrachtgever = Personeelslid::model()->findbyPk($this->opdrachtgever);

                if ($opdrachtgever)

                {

                    $code = '<span title="';

                    $code .= $opdrachtgever->voornaam . ' ' . $opdrachtgever->familienaam;

                    $code .= '">';

                    $code .= $opdrachtgever->{'pers-code'};

                    $code .= '</span>';

                    return $code;

                }

        }