Php 如何修复致命错误:无法重新声明';它只在麦金塔上?
仅当我在Macintosh上运行时,而不是在windows浏览器上运行时,才会出现此致命错误,这是没有意义的,因为除了检查浏览器条件外,条件循环运行相同的代码: 有人能帮我理解如何在php中停止这个错误吗?错误发生在QEnterKeyEvent的第一个实例上,而不是第二个实例上。这没有道理 在代码中,第一个实例是第一次调用它,因此据我所知,该类尚未创建 但错误是:无法重新声明类QEnterKeyEventPhp 如何修复致命错误:无法重新声明';它只在麦金塔上?,php,macos,qcodo,Php,Macos,Qcodo,仅当我在Macintosh上运行时,而不是在windows浏览器上运行时,才会出现此致命错误,这是没有意义的,因为除了检查浏览器条件外,条件循环运行相同的代码: 有人能帮我理解如何在php中停止这个错误吗?错误发生在QEnterKeyEvent的第一个实例上,而不是第二个实例上。这没有道理 在代码中,第一个实例是第一次调用它,因此据我所知,该类尚未创建 但错误是:无法重新声明类QEnterKeyEvent // Key-Specific Events (EnterKey, EscapeKey,
// 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';
}
}
两个代码块定义相同的类:
class QEnterKeyEvent extends QKeyDownEvent {
protected $strCondition = 'event.keyCode == 13';
}
从您给出的示例代码来看,完全在if/else语句之外定义该类更有意义,这将减少维护和解决错误的代码量
但是,我怀疑您在阅读代码时可能与大括号不匹配;粘贴代码段时,不应出现错误
如果第二个类定义与第一个类定义同时出现(因为它们不是同一个条件的一部分),那么您可能会看到该错误
如果您决定不重新构造代码以避免重复(对于当前结构,您可能有充分的理由,这些理由在您给出的代码段中没有指出),您可以使用PHP来避免复制类定义的尝试:
} else {
if ( !class_exists('QEnterKeyEvent') ) {
class QEnterKeyEvent extends QKeyDownEvent {
protected $strCondition = 'event.keyCode == 13';
}
}
}
如果您确实使用这种方法,那么仔细检查类的定义是否符合您在所有情况下的预期是有意义的
这是来自QCodo代码库的代码样本吗?如果是这样,您可能应该通过他们的
PPS。哦,看。请参见和…两个代码块定义了相同的类:
class QEnterKeyEvent extends QKeyDownEvent {
protected $strCondition = 'event.keyCode == 13';
}
从您给出的示例代码来看,完全在if/else语句之外定义该类更有意义,这将减少维护和解决错误的代码量
但是,我怀疑您在阅读代码时可能与大括号不匹配;粘贴代码段时,不应出现错误
如果第二个类定义与第一个类定义同时出现(因为它们不是同一个条件的一部分),那么您可能会看到该错误
如果您决定不重新构造代码以避免重复(对于当前结构,您可能有充分的理由,这些理由在您给出的代码段中没有指出),您可以使用PHP来避免复制类定义的尝试:
} else {
if ( !class_exists('QEnterKeyEvent') ) {
class QEnterKeyEvent extends QKeyDownEvent {
protected $strCondition = 'event.keyCode == 13';
}
}
}
如果您确实使用这种方法,那么仔细检查类的定义是否符合您在所有情况下的预期是有意义的
这是来自QCodo代码库的代码样本吗?如果是这样,您可能应该通过他们的
PPS。哦,看。请参阅和…我看到此代码示例来自QCodo代码库?在这种情况下,你可能应该通过他们的网站报告这个问题。在那里看了之后,我看到已经有一些报告了:而且 以下是完整的代码块(来自Qcodo网站上的论坛帖子): 所以在第二次阅读时,我相信问题不是这段代码同时命中了两个类定义,而是这段代码实际上被调用了两次。如果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);
我看到这个代码示例来自QCodo代码库?在这种情况下,你可能应该通过他们的网站报告这个问题。在那里看了之后,我看到已经有一些报告了:而且 以下是完整的代码块(来自Qcodo网站上的论坛帖子): 所以在第二次阅读时,我相信问题不是这段代码同时命中了两个类定义,而是这段代码实际上被调用了两次。如果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);
我在尝试为客户端安装XSilva的Lightspeed Webstore时遇到了同样的问题。经过一些挖掘和测试,我想我已经解决了这个问题。(仅供参考,简单地将'require'更改为'require_once'——虽然这是一个好主意——对我来说并不奏效。)我知道这是一个难看的黑客行为,但我用类_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';
}
}
我在尝试为客户端安装XSilva的Lightspeed Webstore时遇到了同样的问题。经过一些挖掘和测试,我想我已经解决了这个问题。(仅供参考,简单地将'require'更改为'require_once'——虽然这是一个好主意——对我来说并不奏效。)我知道这是一个难看的黑客行为,但我用类_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';
}
}
QCodo的一个社区分支称为QCubed,他们现在似乎已经修复了QA。
QCodo的一个社区分支称为QCubed,他们现在似乎在QA中有一个补丁。
Edit please,S&G Police here…Edit please,S&G Police here…Chris,谢谢…这两段代码定义同一类的原因是,其中一段位于浏览器为Macintosh的实例中。这个错误似乎发生在代码的第一个实例上……非常奇怪……也许我会设置条件来检查它是否存在……Chris,谢谢……两个代码块定义同一个类的原因是其中一个位于浏览器为Macintosh的实例中。这个错误似乎发生在代码的第一个实例上…非常奇怪…也许我会把条件放进去检查它是否存在…啊,我想你可能已经解决了