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