两个类在PHP中同名时如何引用需要的常量?
How to reference the desired constant when two classes have the same name in PHP?
我正在维护一个旧的 Zend 1.12 应用程序。此应用程序有两个名为 Document (application/models/Document.php
) 的 class,其中一个包含一组我需要引用的常量。
通常这很好用。但是,在一个助手 (library/App/Helper/Action/Docusign.php
) 中,出于某种我无法确定的原因正在引用不同的文档 class (library/Docusign/APIService.php
),当然它没有所需的常量.
如何指定在引用常量时应该使用哪个 class?
$documentType = Document::DOCUMENT_TYPE_OTHER;
Fatal error: Access to undeclared static property: Document::$DOCUMENT_TYPES in ...
我也尝试过各种命名空间,但没有成功。 Zend 似乎在幕后做了一些事情来搞砸它 :P
对我有什么建议吗?
如果如您所说,您没有使用任何其他命名空间,请将其粘贴在 library/Docusign/APIService.php
的最顶部:
<?php
namespace Docusign;
...
然后,当引用那个不同的 class 时,使用此代码:
$doc = new \Docusign\Document();
$documentType = Document::DOCUMENT_TYPE_OTHER;
请注意,library/Docusign/APIService.php
中的任何目标代码也需要命名空间。所以如果你有这样一行:
$date = new DateTime();
您需要将其更改为:
$date = new \DateTime();
没有基于命名空间的解决方案,除非把所有东西都拆掉并重新做,以便在整个应用程序中正确使用命名空间。
相反,我通过将 class 名称之一从 Document 更改为 DocumentModel 进行重构,以明确强制区分。
我正在维护一个旧的 Zend 1.12 应用程序。此应用程序有两个名为 Document (application/models/Document.php
) 的 class,其中一个包含一组我需要引用的常量。
通常这很好用。但是,在一个助手 (library/App/Helper/Action/Docusign.php
) 中,出于某种我无法确定的原因正在引用不同的文档 class (library/Docusign/APIService.php
),当然它没有所需的常量.
如何指定在引用常量时应该使用哪个 class?
$documentType = Document::DOCUMENT_TYPE_OTHER;
Fatal error: Access to undeclared static property: Document::$DOCUMENT_TYPES in ...
我也尝试过各种命名空间,但没有成功。 Zend 似乎在幕后做了一些事情来搞砸它 :P
对我有什么建议吗?
如果如您所说,您没有使用任何其他命名空间,请将其粘贴在 library/Docusign/APIService.php
的最顶部:
<?php
namespace Docusign;
...
然后,当引用那个不同的 class 时,使用此代码:
$doc = new \Docusign\Document();
$documentType = Document::DOCUMENT_TYPE_OTHER;
请注意,library/Docusign/APIService.php
中的任何目标代码也需要命名空间。所以如果你有这样一行:
$date = new DateTime();
您需要将其更改为:
$date = new \DateTime();
没有基于命名空间的解决方案,除非把所有东西都拆掉并重新做,以便在整个应用程序中正确使用命名空间。
相反,我通过将 class 名称之一从 Document 更改为 DocumentModel 进行重构,以明确强制区分。