4

我想测试phpDocumentor-alpha,出现了一些人似乎没有的问题:

# sudo pear uninstall phpdoc/phpDocumentor-alpha
uninstall ok: channel://pear.phpdoc.org/phpDocumentor-2.0.0a6
olivier@olivier-ubuntu ~/Documents/pizzas/dev # phpdoc --help
bash: /usr/bin/phpdoc: Aucun fichier ou dossier de ce type
# 
# sudo pear install --alldeps -f phpdoc/phpDocumentor-alpha
downloading phpDocumentor-2.0.0a6.tgz ...
Starting to download phpDocumentor-2.0.0a6.tgz (1,107,853 bytes)
..................................done: 1,107,853 bytes
install ok: channel://pear.phpdoc.org/phpDocumentor-2.0.0a6
# phpdoc --help
PHP Fatal error:  Cannot redeclare class phpDocumentor\Plugin\Core\Listener in /usr/share/php/phpDocumentor/src/phpDocumentor/Plugin/Core/Listener.php on line 194

Fatal error: Cannot redeclare class phpDocumentor\Plugin\Core\Listener in /usr/share/php/phpDocumentor/src/phpDocumentor/Plugin/Core/Listener.php on line 194
# 

好的,我可以通过以下方式避免这个问题:

if ( !class_exists('MTIHelperEstadosLocal') ) {...}

但这只是一个丑陋的解决方法。我想知道是否有办法知道声明的初始位置(= 其中包括或其他)。

任何的想法?

4

4 回答 4

10

这是简单的解决方案:

print_r(get_declared_classes());
于 2012-07-02T09:45:56.270 回答
3

根据您的操作系统以及您构建文档根路径的方式,路径名中的大写字母与小写字母可能存在问题。这经常让我在大型 CMS 项目(如 Mac OSX 上的 drupal)上绊倒我

// Insert this debug code before require statement.
if (class_exists('classInQuestion')) {
  $reflector = new ReflectionClass('classInQuestion');
  echo $reflector->getFileName() . ' ' . $reflector->getStartLine() . "\n";
  echo $newClassFile;
  exit();
}
// Normal pre-existing require statement
require_once $newClassFile
于 2013-07-29T15:51:45.033 回答
2

在文件 {path-to-pear-directory}/PEAR/phpDocumentor/vendor/composer/ClassLoader.php 中,第 150 行是:

require $file;

只需将其更改为

require_once $file;
于 2012-07-05T18:43:15.260 回答
0

除了所有答案之外,您还可以考虑 php 声明的类。例如点网。当我为了使用 Dotnet 二进制文件而明确定义一个名为 Dotnet 的类时,它会在创建该类的第一个实例时引发错误。

如果您要使用自己修改过的类而不是 php 呈现给您的类,您应该给它们提供可区分的名称。

于 2019-12-02T09:47:39.703 回答