PHP对象坏了,$这是未定义的

时间:2011-12-14 18:04:14

标签: 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-&gt; exists;

请注意,这不是一个未经测试的示例,它是产生错误的完整代码。我知道代码是有效的,但它在两个环境中都不起作用。

我真的不确定为什么!一台服务器运行PHP 5.3.3(fedora),另一台运行PHP 5.3.2(ubuntu)。我也试过重启服务器。他们没有任何共享,尽管他们在同一个网络上。

有人有任何调试技巧吗?

3 个答案:

答案 0 :(得分:3)

您的测试代码没有任何问题。它在PHP 5.3.3上运行没有问题。在将“真实”代码转换为测试代码并在此处发布时,您可能已经失去了问题的原因。

答案 1 :(得分:1)

正如之前所说,代码看起来很好,不应该导致任何错误。

因此我猜它与php引擎本身的错误有关:

你是如何安装PHP的?

  • 您自己编译了源代码吗?执行时有./configure或记录任何警告或错误消息吗?
  • 您是否使用包管理器安装了PHP? (我想一切都应该没问题。)

您是如何配置PHP的?

  • 您是否对php.ini进行了更改,例如更改内存限制,路径等?
  • 您是否安装了可能导致问题的任何扩展程序?我的经验表明,操作码缓存(例如APC)通常会导致无法轻易解释的错误。此外,调试器或其他扩展可能会造成干扰。

您的HTTP-Daemon-Log中是否有(附加)错误消息?

  • 有时可以在error.log文件中找到其他错误,以防服务器配置为执行此操作(例如,意外终止脚本或类似操作)。

答案 2 :(得分:0)

代码似乎按原样运行,但我从未见过没有parens实例化的对象。

$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;
}