gpt4 book ai didi

PHP:对象在创建后立即为 NULL

转载 作者:可可西里 更新时间:2023-11-01 12:21:35 25 4
gpt4 key购买 nike

我们的 php logs 中偶尔会出现非常奇怪的错误: 尝试获取非对象的属性。

这个确切的错误似乎是由访问以下 if 语句中的成员 $shortName 引起的:

class MyLocaleWrapper extends SomeOtherClass {

protected static $system = NULL;
public static function getSystemLocale() {
if (self::$system === NULL) {
self::$system = new self();
debug(self::$system);
self::$system->rfcName = SYSTEM_LOCALE_RFCNAME;
self::$system->shortName = strtolower(Locale::getRegion(self::$system->rfcName));
if (self::$system->shortName == '') {
self::$system->shortName = strtolower(self::$system->rfcName);
}


# in another file:
class SomeOtherClass {

public function __construct() {
# Some documentation about features that have been
# removed from the constructor, but no real code in here.
return NULL;
}


# in yet another file:
MyLocaleWrapper::getSystemLocale();

如果我将 self::$system 转储到日志文件中,我会看到它是 NULL - 就在使用关键字 new .

最有趣的部分是这个文件包含在我们页面的每个请求中,所以它每秒执行 10 次。但偶尔它会在没有任何人接触代码(甚至服务器)的情况下失败。

有没有其他人在 PHP 中经历过这种行为?

最佳答案

感谢所有更新。 (请参阅上面对原始帖子的广泛评论)。

不幸的是,我和您一样感到困惑——该代码看起来一切正常。

要么

  1. 您在 php 中发现了一些相当隐蔽的错误,或者...
  2. 这些症状会诱使您认为问题出在一个地方,而实际上是在其他地方,或者...
  3. 我们在代码中遗漏了一些对于经验丰富的 php 开发人员来说应该很明显的东西。 ;-)

如果是我的生产系统要处理,我可能会在构造函数中注释掉 return NULL,让它在生产中运行一段时间。返回不应该导致任何问题,但这是我在这里看到的唯一奇怪的事情。

抱歉,我无能为力。如果您解决了,请回来告诉我们。

关于PHP:对象在创建后立即为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3989709/

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