只有当我在Macintosh上运行时才会出现这个致命的错误,但是在Windows浏览器上没有,这是没有意义的,因为除了检查浏览器条件之外,条件循环运行相同的代码:
有人可以帮我理解如何在php中停止此错误吗?错误发生在QEnterKeyEvent的FIRST实例上......而不是第二个。这没有意义。
在代码中,第一个实例是第一次被调用,所以到目前为止还没有创建类。
然而错误说:不能重新声明类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';
}
}
答案 0 :(得分:1)
我看到这个代码示例来自QCodo代码库?在这种情况下,你可能应该通过他们"Bugs and Issues" forum.报告问题。看了之后,我看到已有几个报告:this和this ...
这是完整的代码块(来自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);
答案 1 :(得分: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代码库吗?如果是这样,您可能应该通过"Bugs and Issues" forum.
报告问题答案 2 :(得分:0)
我在尝试为客户端安装XSilva的Lightspeed Webstore时遇到了同样的问题。经过一些挖掘和测试,我想我已经解决了这个问题。 (仅供参考,只需将'require'更改为'require_once' - 虽然这是一个好主意 - 对我来说不起作用。)我知道这是一个丑陋的黑客,但我用一个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';
}
}
答案 3 :(得分:0)
QCodo的社区分支称为QCubed,他们现在似乎已经修复了QA。 http://trac.qcu.be/projects/qcubed/ticket/134