PHP Объекты сломаны, $ это неопределено

Код:

<?php class My_Test{ public $exists = 'yah'; public function test(){ return $this->exists; } } $test = new My_Test; echo $test->test(); 

периодически выдает следующую ошибку (каждый другой запрос страницы в среднем) на двух серверах:

 ( ! ) Notice: Trying to get property of non-object in test.php on line 8 Call Stack # Time Memory Function Location 1 0.0003 636392 {main}( ) ../test.php:0 2 0.0003 636840 My_Test->test( ) ../test.php:14 

где строка 10 является `return $ this-> существует;

Обратите внимание, что это непроверенный пример, это полный код, который вызывает ошибку. Я знаю, что код действителен, но он не работает в двух средах.

Я действительно не знаю, почему! Один сервер работает PHP 5.3.3 (fedora), другой PHP 5.3.2 (ubuntu). Я также попытался перезагрузить серверы. Они ничего не разделяют, хотя они находятся в одной сети.

У кого-нибудь есть советы по отладке?

Поскольку люди до этого заявили, что код выглядит хорошо и не должен вызывать ошибок.

Поэтому я думаю, что это связано с ошибкой самого процессора php:

Как вы установили PHP?

  • Вы сами составили исходный код? У вас есть ./configure или занести в журнал любые предупреждения или сообщения об ошибках во время выполнения?
  • Установили ли вы PHP с помощью диспетчера пакетов? (Думаю, все должно быть хорошо).

Как вы настроили PHP?

  • Вы вносили какие-либо изменения в php.ini, как изменение предела памяти, путей и т. Д.?
  • Установили ли вы расширение, которое может вызвать проблемы? Мой опыт говорит, что часто кеши кода операции (например, APC) могут приводить к ошибкам, которые невозможно легко объяснить. Также отладчики или другие расширения могут вызывать помехи.

У вас есть (дополнительные) сообщения об ошибках в вашем HTTP-Daemon-Log?

  • Иногда в файле error.log могут появляться дополнительные ошибки, если сервер настроен на это (например, неожиданное завершение сценария или подобное).

В вашем тестовом коде нет ничего плохого. Он работает без проблем на PHP 5.3.3. Вероятно, вы потеряли причину проблемы при преобразовании своего «реального» кода в тестовый код для публикации здесь.

Код работает как есть, но я никогда не видел объект, созданный без парнеров.

 $test = new My_Test; // Should be $test = new My_Test(); 

Вы также можете реализовать некоторые протоколирования:

 public function test() { // Can edit this to use instanceof or getclass for further testing if (!is_object($this)) { error_log(serialize($this)); } return $this->exists; }