Php 请求时间歇性“尝试分配非对象的属性”/无法通过$this设置对象属性

Php 请求时间歇性“尝试分配非对象的属性”/无法通过$this设置对象属性,php,apache,Php,Apache,我正在开发的一个网络应用程序出现了一个非常奇怪的间歇性错误,只有在特定情况下才会触发。一旦执行了一个特别长的处理页面,并对100000多条记录进行了遍历、检索和排序,此后的每个页面加载都会失败,并在所使用的任何单例对象上出现以下错误: PHP警告:尝试在第33行的E:\tracking\lib\Controller\ControllerChainManager.class.PHP中分配非对象的属性 代码的相关部分如下:第33行标有箭头 class ControllerManager { priv

我正在开发的一个网络应用程序出现了一个非常奇怪的间歇性错误,只有在特定情况下才会触发。一旦执行了一个特别长的处理页面,并对100000多条记录进行了遍历、检索和排序,此后的每个页面加载都会失败,并在所使用的任何单例对象上出现以下错误:

PHP警告:尝试在第33行的E:\tracking\lib\Controller\ControllerChainManager.class.PHP中分配非对象的属性

代码的相关部分如下:第33行标有箭头

class ControllerManager {
private static $Instance;
private $CurrentController = 0;
private $ControllerArray;
private $ControllerArrayIndex = 0;

/**
 * Constructor
 * @return null;
 */
private function __construct() {
    $this->ControllerArray = array(); <-- LINE 33
    return;
}

/**
 * Singleton instance function
 * @return ControllerManager;
 */
public static function Inst() {
    if (!isset(self::$Instance)) {
        $c = __CLASS__;
        self::$Instance = new $c;
    }
    return self::$Instance;
}

//*** snip the rest of the class definition ***
编辑3:看起来上一个stackOverflow帖子是相关的/可能是相同的错误:

编辑3a:

此错误报告描述了我的确切问题:从之前的SO帖子中找到
我将尽快在服务器上更新PHP,我将发布有关这是否解决了问题的信息。

为什么不将其设置为私有$ControllerArray=array;跳过_构造方法

排序如下:如编辑3和3a中所述,升级PHP版本解决了问题。谢谢大家的帮助。

尝试了一下,但运气不好。。。虽然我发现了一些事实上稍微改变了问题的东西,但我会更新。一个博克集魔法方法怎么样?有趣的想法__set没有在讨论中的类中使用,但是我将设置一个隐式的set,看看它是否有任何变化——请看这个空格。问题的间歇性本质对我来说是一个真正的难题。隐式的_集/_集正在吐出相同的错误。你能展示一些发生这些错误的实际代码吗,即初始化ControllerChainanda的地方没有问题:改为编辑主帖子,使其更易于查看。在每次页面加载时调用此函数$控制器、$action和$vars是从过滤的$\u GET填充的。
class ControllerChainData {
public $Action;
public $Controller;
public $Vars;

public function __construct($controller,$action,$vars = null) {
    $this->Controller = $controller; //<-- 10
    $this->Action = $action; //<-- 11
    $this->Vars = $vars; //<-- 12
}
} 
public function RegisterControllerIntoChain ($controller, $action, $vars = null) {          
$contpath = 'controllers/' . $controller . '/' . $controller . '.cont.php';
    if (file_exists($contpath)) {
        include_once($contpath);
        $this->ControllerArray[$this->ControllerArrayIndex++] = new ControllerChainData($controller,$action,$vars);
        return true;
    }
    return false;
}