【发布时间】:2012-06-11 23:44:44
【问题描述】:
我正在使用一个脚本,它两次调用同一个类并抛出错误:
Fatal: Cannot redeclare class urlConverter (/var/www/core/cache/includes/elements/modsnippet/23.include.cache.php:14)
我已尝试将以下代码放入:
if( !class_exists( 'urlConverter', false ) )
{
$urlConverter = new urlConverter( $modx );
}
但是,我正在使用的 CMS 报告了错误 500,并且无法在日志中看到它抛出该错误的原因。
有谁知道如何检查该类是否已正确声明?
编辑:
我使用的是 CMS,因此该类位于代码段中,而不是实际文件中。他们是这样称呼他们的 sn-ps 的:
$data['viewonlinelink'] = $this->modx->runSnippet( 'urlConverter', array(
'action' => 'encrypt',
'string' => http_build_query( $string ) ) );
我需要再次调用它以获得不同的结果。
编辑2:
这里是 urlConverter:
<?php
class urlConverter {
public $modx;
public function __construct( modX &$modx )
{
$this->modx =& $modx;
}
public function action( $scriptProperties )
{
return $this->$scriptProperties['action']( $scriptProperties['string'] );
}
private function encrypt( $str )
{
return $str;
}
private function decrypt( $str )
{
return $str;
}
}
}
$urlConverter = new urlConverter( $modx );
return $urlConverter->action( $scriptProperties );
现在我从另一个脚本中调用以下内容:
$data['viewonlinelink'] = $this->modx->runSnippet( 'urlConverter', array(
'action' => 'encrypt',
'string' => http_build_query( $string ) ) );
$data['confirmonline'] = $this->modx->runSnippet( 'urlConverter', array(
'action' => 'encrypt',
'string' => http_build_query( $reversed ) ) );
在我的 urlConverter 类中运行 encrypt 函数,我应该会收到两个不同的结果。
【问题讨论】:
-
您是否包含/需要类文件?如果是这样,请改用
include_once或require_once。 -
它可能是你在某处复制的要求/包含。
-
我有点包括在内。我正在使用一个名为 MODx 的 CMS。我将使用他们 CMS 中的 require 语句修改我的问题。
-
在查看在线文档时,您可能需要修改sn-p代码:rtfm.modx.com/display/revolution20/Snippets尝试将
include更改为include_once。 -
@TimWithers 我假设您指的是 if (file_exists($file)) { $o = include $file; } else { $o = '文件未找到:'.$file; } 返回 $o;我想我可以尝试一下。我没有那样引用他们的 sn-ps,但这不会造成伤害。