PHP未定义的常量错误没有意义

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP未定义的常量错误没有意义脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我真的希望我在这里错过了一些简单的东西,但是我在 PHP中使用类常量遇到了一个奇怪的问题.我创建了一个名为Utils的简单类,并添加了两个类常量CRYPT_SALT和LOgin_PAGE.我从其文件中引用了这些文件,并且它们有效.然后我又添加了五个类常量,它们不起作用.我在/VAR/www/modx/test.PHP上获得了“致命错误:未定义的类常量”,其中一个是新的常量,并且是我尝试使用它的行.

这是Utils类:

<?PHP
// 
// Utils.PHP
//  
// This class is a collection of static utilITy functions.  Since the methods are static,they should
// all be invoked with:
//
//  Utils::methodName();
//
// This class also contains global constants,which are *not* kept in Config.  They should be accessed with:
//
//  Utils::CONSTANT;
// 
// addToCSVString -- adds an incoming string to a CSV string,possibly PRePEnding a comma and space.  Returns
// addToJSONString -- adds an incoming key/value pair to a JSON string
// jsonify -- takes in a string and replaces control characters and quotes with properly
//

require_once( "LOGger.PHP" );

class Utils {

        // Constants 

    const CRYPT_SALT    = '$6$';
    const LOGIN_PAGE    = '/modx/';

        // Session keys

    const SKEY_DEBUG    = 'debug';
    const SKEY_LOGIN    = 'login';
    const SKEY_LANG     = 'curLang';
    const SKEY_UID      = 'userID';
    const SKEY_LOGGER   = 'logger';


        // Members

    public static $debug    = false;

        // Methods

    //
    // addToCSVString -- adds an incoming string to a CSV string,possibly prepending a comma and space.  Returns
    // the new string
    //
    public static function addToCSVString( $csvString,$newVal ) {
        if ( strlen( $csvString ) > 0 ) {
            $csvString  .= ",";
        }

        return $csvString . $newVal;
    }


    //
    // addToJSONString -- adds an incoming key/value pair to a JSON string
    //
    public static function addToJSONString( $jsonString,$key,$val ) {
        $debug      = self::$debug;

        if ( $debug ) {
            $logger = Logger::singleton();
            $logger->log( "In Utils::addToJSONString" );
            $logger->log( "\$key = [$key]",1 );
            $logger->log( "\$val = [$val]",1 );
        }

        if ( strpos( $val,"{" ) === false ) {

            if ( $debug ) {
                $logger->log( "Utils: this is a plain value",1 );
            }
                // Val is a string

            $val    = self::jsonify( $val );

            return self::addToCSVString( $jsonString,"\"" . $key . "\" : \"" . $val . "\"" );
        } else {
            if ( $debug ) {
                $logger->log( "this is a JSON object",1 );
            }

                // Val is a JSON object

            return self::addToCSVString( $jsonString,"\"" . $key . "\" : " . $val . "" );
        }
    }


    //
    // jsonify -- takes in a string and replaces control characters and quotes with properly
    // escaped JSON values
    //
    public static function jsonify( $val ) {
        $val    = str_replace( '\\','\\\\',$val );        // convert backslashes First 
        $val    = str_replace( "\n",'\\n',$val );
        $val    = str_replace( "\r",'\\r',$val );
        $val    = str_replace( "\t",'\\t',$val );
        $val    = str_replace( "\v",'\\v',$val );
        $val    = str_replace( "\f",'\\f',$val );
        $val    = str_replace( "\n",$val );

        return $val;
    }


}

?>

添加类常量之前,所有成员函数都已编写和测试,它们正在工作.

这里是test.PHP,一个简单的测试页面来说明问题:

<h1>Test.PHP</h1>

<?PHP

    // Set up autoloader

spl_autoload_@R_406_313@( '.PHP,.inc' );
spl_autoload_register();

    // Test class constants

echo "<b>Testing Utils class constants</b></br>\n"; 
echo 'Utils::CRYPT_SALT = [' . Utils::CRYPT_SALT . "]<br>\n";
echo 'Utils::LOGIN_PAGE = [' . Utils::LOGIN_PAGE . "]<br>\n";
echo 'Utils::SKEY_LOGGER = [' . Utils::SKEY_LOGGER . "]<br>\n";
echo 'Utils::SKEY_DEBUG = [' . Utils::SKEY_DEBUG . "]<br>\n";
echo 'Utils::SKEY_LOGIN = [' . Utils::SKEY_LOGIN . "]<br>\n";
echo 'Utils::SKEY_LANG = [' . Utils::SKEY_LANG . "]<br>\n";
echo 'Utils::SKEY_UID = [' . Utils::SKEY_UID . "]<br>\n";
echo "</br>\n";

?>

我从test.PHP得到的确切错误是:

Fatal error: Undefined class constant 'SKEY_LOGGER' in /var/www/modx/test.PHP on line 15

我尝试过以下方法解决这个问题:

重命名常量,包括使用不带下划线的小写名称

– 更改声明的顺序.

– 从双引号改为单引号.

– 注释掉CRYPT_SALT和LOGIN_PAGE的声明

– 向我的同事展示这些代码,他们都是无能为力的

无论我尝试什么,CRYPT_SALT和LOGIN_PAGE工作,其他常量都不起作用.我担心我会遇到PHP类课程中的一些错误.或者也许我只是盯着这么久,以至于我错过了这个显而易见的事实.

解决方法

是,

答案是我像往常一样是个白痴.

本图文内容来网友网络收集整理提供,作为学习参考使用,版权属于原作者。

脚本宝典总结

以上是脚本宝典为你收集整理的PHP未定义的常量错误没有意义全部内容,希望文章能够帮你解决PHP未定义的常量错误没有意义所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。