1

只有当我在 Macintosh 上运行而不是在 Windows 浏览器上运行时,我才会收到这个致命错误,这没有意义,因为除了检查浏览器条件之外,条件循环运行相同的代码:

有人可以帮助我了解如何在 php 中停止此错误吗?错误发生在 QEnterKeyEvent 的第一个实例上......而不是第二个实例。这没有意义。

在代码中,第一个实例是第一次被调用,所以据我所知,该类尚未创建。

然而错误说:无法重新声明类 QEnterKeyEvent

// Key-Specific Events (EnterKey, EscapeKey, UpArrowKey, DownArrowKey, etc.)

if (QApplication::IsBrowser(QBrowserType::Macintosh)) {
    echo "keyspecific events - macintosh";

    class QEnterKeyEvent extends QKeyPressEvent {
        protected $strCondition = 'event.keyCode == 13';
    }
    class QEscapeKeyEvent extends QKeyPressEvent {
        protected $strCondition = 'event.keyCode == 27';
    }
    class QUpArrowKeyEvent extends QKeyPressEvent {
        protected $strCondition = 'event.keyCode == 38';
    }
    class QDownArrowKeyEvent extends QKeyPressEvent {
        protected $strCondition = 'event.keyCode == 40';
    }
} else {
    echo "key specific events - windows";

    class QEnterKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 13';
    }
    class QEscapeKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 27';
    }
    class QUpArrowKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 38';
    }
    class QDownArrowKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 40';
    }
}
4

4 回答 4

1

我看到这个代码示例来自 QCodo 代码库?在这种情况下,您可能应该通过他们的“错误和问题”论坛报告问题。看了看那里,我看到已经有几个报告:这个这个......

这是完整的代码块(来自 Qcodo 网站上的论坛帖子):

// Key-Specific Events (EnterKey, EscapeKey, UpArrowKey, DownArrowKey, etc.)

if (QApplication::IsBrowser(QBrowserType::Macintosh)) {
    class QEnterKeyEvent extends QKeyPressEvent {
        protected $strCondition = 'event.keyCode == 13';
    }
    class QEscapeKeyEvent extends QKeyPressEvent {
        protected $strCondition = 'event.keyCode == 27';
    }
    class QUpArrowKeyEvent extends QKeyPressEvent {
        protected $strCondition = 'event.keyCode == 38';
    }
    class QDownArrowKeyEvent extends QKeyPressEvent {
        protected $strCondition = 'event.keyCode == 40';
    }
} else {
    class QEnterKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 13';
    }
    class QEscapeKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 27';
    }
    class QUpArrowKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 38';
    }
    class QDownArrowKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 40';
    }
} 

所以在第二次阅读时,我认为问题不在于这段代码同时命中了两个类定义,而在于这段代码实际上被调用了两次。如果 Qcodo 被初始化两次,它看起来(从 Qcodo 的一瞥)会发生这种情况。

在 QApplicationBase::Initialize() 中有以下代码:

  // Preload Class Files
  foreach (QApplication::$PreloadedClassFile as $strClassFile)
      require($strClassFile);

尝试用下面的代码替换它,看看问题是否解决?如果是这样,您可能在代码中的某处无意中初始化了 Qcodo 两次。

  // Preload Class Files
  foreach (QApplication::$PreloadedClassFile as $strClassFile)
      require_once($strClassFile);
于 2009-01-06T08:41:19.623 回答
0

两个代码块都定义了同一个类:

class QEnterKeyEvent extends QKeyDownEvent {
            protected $strCondition = 'event.keyCode == 13';
}

从您提供的示例代码中,完全在 if / else 语句之外定义该类更有意义,这将减少维护和解决错误的代码量。

但是,我怀疑您在阅读代码时可能不匹配大括号;从您粘贴的代码段中,不应该发生错误。

如果第二个类定义和第一个类定义一样发生(因为它们不是同一个条件的一部分),那么您可能会看到该错误。

如果您决定不重组代码以避免重复(您可能对当前结构有充分的理由,在您提供的代码段中未指明的结构),您可以使用 PHP 的class_exists()来避免尝试复制类定义:

} else {
  if ( !class_exists('QEnterKeyEvent') ) {
    class QEnterKeyEvent extends QKeyDownEvent {
      protected $strCondition = 'event.keyCode == 13';
    }
  }
}

如果您确实使用了这种方法,那么仔细检查该类是否在所有情况下都按照您的预期定义是有意义的。

PS。此代码示例来自 QCodo 代码库吗?如果是这样,您可能应该通过他们的“错误和问题”论坛报告该问题。

聚苯乙烯。哦,看。看到这个这个...

于 2009-01-06T00:59:38.260 回答
0

我在尝试为客户端安装 XSilva 的 Lightspeed Webstore 时遇到了同样的问题。经过一些挖掘和测试,我想我已经解决了这个问题。(仅供参考,只需将 'require' 更改为 'require_once' - 虽然是个好主意 - 对我不起作用。)我知道这是一个丑陋的 hack,但我用 class_exists() 检查包装了有问题的代码块,如下所示:

// Key-Specific Events (EnterKey, EscapeKey, UpArrowKey, DownArrowKey, etc.)
if (QApplication::IsBrowser(QBrowserType::Macintosh)) {
    if(!class_exists('QEnterKeyEvent') and !class_exists('QEscapeKeyEvent') and !class_exists('QUpArrowKeyEvent') and !class_exists('QDownArrowKeyEvent')) {
        class QEnterKeyEvent extends QKeyPressEvent {
            protected $strCondition = 'event.keyCode == 13';
        }   
        class QEscapeKeyEvent extends QKeyPressEvent {
            protected $strCondition = 'event.keyCode == 27';
        }   
        class QUpArrowKeyEvent extends QKeyPressEvent {
            protected $strCondition = 'event.keyCode == 38';
        }   
        class QDownArrowKeyEvent extends QKeyPressEvent {
            protected $strCondition = 'event.keyCode == 40';
        }   
    }   
} else {
    class QEnterKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 13';
    }   
    class QEscapeKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 27';
    }   
    class QUpArrowKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 38';
    }   
    class QDownArrowKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 40';
    }   
}   
于 2010-01-09T17:33:28.077 回答
0

There's a community branch of QCodo called QCubed, and they appear to have a fix in QA right now. http://trac.qcu.be/projects/qcubed/ticket/134

于 2010-02-02T20:32:33.103 回答