gpt4 book ai didi

php - 虚假的 PHP 未声明的静态属性

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:54 27 4
gpt4 key购买 nike

使用 PHP 5.3.x 运行 Debian Squeeze 服务器(发生在 Apache 和 nginx 上)我看到随机出现 fatal error 未声明的静态属性。通常这指的是以下代码:

class aliro extends aliroBase {
private static $instance = null;

public static function getInstance () {
return self::$instance instanceof self ? self::$instance : (self::$instance = new self());
}
...

并声明 aliro::$instance 在上面显示的最后一行中未声明(不包括右大括号)。然而,这个变量在几行之前就已经很清楚地声明了。 (确切的错误消息是“PHP fatal error :访问未声明的静态属性:aliro::$instance in/var/www/apic/public_html/aliro.php on line 91”)。

此代码针对每个对服务器的请求执行,目前服务器每小时运行大约 1,250 个请求。但错误似乎每小时发生一次。

同时,系统日志可能会显示 suhosin 错误消息:

Oct 22 11:29:45 apic suhosin[20764]: ALERT-SIMULATION - 
canary mismatch on efree() - heap overflow detected at 0x2ec9118

或内核错误,例如:

Oct 22 10:29:43 apic kernel: [83469.382141] php[9479] general protection 
ip:6a8161 sp:7fffa270ec20 error:0 in php5[400000+6f9000]

Oct 22 09:29:45 apic kernel: [79871.245018] php[705]: segfault at 27f2298 
ip 00007f24229e640e sp 00007fff13aca388 error 6 in
libc-2.11.2.so[7f2422968000+158000]

Cron 每五分钟运行一次以触发 munin-node,但错误仅每小时发生一次。是什么原因造成的?

由于不可重复,因此不清楚可以做什么,尽管这些错误会造成数据损坏的风险。有什么建议吗?

最佳答案

这段代码不是(至少不应该是问题)。我会检查代码的其他部分,您可能会在其中从 aliro 类外部引用 aliro::$instance。 $instance 是私有(private)的,如果您尝试在类之外触摸它,则会触发您抛出的确切错误(未声明的静态属性)。我会把它改成 protected (我也讨厌私有(private)属性(property),他们很少需要私有(private)而不是 protected )——这会给出更好的错误信息(你试图访问非公共(public)的属性(property)),我认为它应该给你的文件和它发生的行。

关于php - 虚假的 PHP 未声明的静态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7861151/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com