【发布时间】:2014-07-22 14:23:24
【问题描述】:
我在我们的开发环境中有以下奇怪之处。假设我有 2 节课 一个在命名空间\wtf
namespace \wtf\isWrongHere;
class DrStrange {
}
我还有一个类,我通过依赖注入传递该类
namespace \normalPpl;
class ThisHasNoLogic {
public function __construct(DrStrange $strange){
//here be dragons
}
}
现在当我通过以下方式实例化课程时:
$whata = new ThisHasNoLogic(new \wtf\isWrongHere\DrStrange());
在我的 debian 开发机器上,我得到了正常的实例,在我们的开发机器(我们的实时服务器的克隆)上,我得到了正常的结果。
但是在我们的实时机器上,我遇到了一个致命错误。这怎么可能?
PHP Catchable fatal error: Argument 2 passed to xxxx must be an instance of xxxxx, instance of aaaaar given, called in ....QQ
在所有服务器中,它都接受输入类型,但在现场它告诉我传递的类与所需的不匹配...
又名 \wtf\isWrongHere\DrStrange 不是 DrStrange 的实例,这对我来说只是普通的 WTH@12 时刻。
以下是规格:
开发机器:
带有 Suhosin-Patch (cli) 的 PHP 5.3.3-7+squeeze14(构建时间:2012 年 8 月 6 日 14:18:06) 版权所有 (c) 1997-2009 The PHP Group Zend Engine v2.3.0, 版权所有 (c) 1998-2010 Zend Technologies 使用 Xdebug v2.2.5,版权所有 (c) 2002-2014,作者 Derick Rethans 与 Suhosin v0.9.32.1,版权所有 (c) 2007-2010,SektionEins GmbH
Server version: Apache/2.2.16 (Debian)
Server built: Apr 1 2012 07:14:38
Server's Module Magic Number: 20051115:24
Server loaded: APR 1.4.2, APR-Util 1.3.9
Compiled using: APR 1.4.2, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="/var/run/apache2/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
测试机:
PHP 5.3.3-7+squeeze15 with Suhosin-Patch (cli) (built: Mar 4 2013 13:11:17)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with Suhosin v0.9.32.1, Copyright (c) 2007-2010, by SektionEins GmbH
Server version: Apache/2.2.16 (Debian)
Server built: Mar 3 2013 12:09:44
直播:
PHP 5.3.3-7+squeeze15 with Suhosin-Patch (cli) (built: Mar 4 2013 13:11:17)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with Suhosin v0.9.32.1, Copyright (c) 2007-2010, by SektionEins GmbH
Server version: Apache/2.2.16 (Debian)
Server built: Mar 3 2013 12:09:44
我不知道如何使测试服务器表现得像 Live。有人有什么建议吗??
更新:
当我使用时:
使用 \wtf\isWrongHere\DrStrange;
它有效。但是我无法在忽略此错误的测试系统上重现它。我想在不同的机器上复制它。这是我的实际问题,困扰我的团队超过 1 年。
【问题讨论】:
-
这是伪代码。将纠正它。 (更新:完成了:D)
标签: php zend-framework io namespaces