无法重新声明类 - 检查类是否已存在

Pet*_*ter 4 php oop class

我正在使用一个两次调用同一个类并抛出错误的脚本:

Fatal: Cannot redeclare class urlConverter (/var/www/core/cache/includes/elements/modsnippet/23.include.cache.php:14)
Run Code Online (Sandbox Code Playgroud)

我尝试将以下代码放入:

if( !class_exists( 'urlConverter', false ) )
{
    $urlConverter = new urlConverter( $modx );
}
Run Code Online (Sandbox Code Playgroud)

但是,我正在使用的CMS正在报告错误500并且无法在日志中看到它为什么会抛出该错误.

有谁知道如何检查该类是否已被正确声明?

编辑:

我正在使用CMS,因此Class被放在一个Snippet而不是实际文件中.这就是他们称之为片段的方式:

$data['viewonlinelink'] = $this->modx->runSnippet( 'urlConverter', array(
                                            'action' => 'encrypt',
                                            'string' => http_build_query( $string ) ) );
Run Code Online (Sandbox Code Playgroud)

我需要第二次打电话来获得不同的结果.

EDIT2:

这是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 );
Run Code Online (Sandbox Code Playgroud)

现在从另一个脚本我调用以下内容:

    $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 ) ) );
Run Code Online (Sandbox Code Playgroud)

哪个运行我的urlConverter类里面的函数加密,我应该收到两个不同的结果.

Tim*_*ers 8

在使用更新的代码时,将类文件更改为:

<?php
if(!class_exists('urlConverter')){
    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 );
Run Code Online (Sandbox Code Playgroud)


Exp*_*lls 5

redeclare class错误不是由创建类的新实例引起的,它是通过class在同一符号上调用运算符来调用的.您可能urlConverter多次包含类定义文件.