PHP未定义的常量错误没有意义
发布时间:2020-12-13 16:45:53 所属栏目:PHP教程 来源:网络整理
导读:我真的希望我在这里错过了一些简单的东西,但是我在 PHP中使用类常量遇到了一个奇怪的问题.我创建了一个名为Utils的简单类,并添加了两个类常量CRYPT_SALT和LOGIN_PAGE.我从其他文件中引用了这些文件,并且它们有效.然后我又添加了五个类常量,它们不起作用.我在
我真的希望我在这里错过了一些简单的东西,但是我在
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_extensions( '.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类课程中的一些错误.或者也许我只是盯着这么久,以至于我错过了这个显而易见的事实. 解决方法
是,
答案是我像往常一样是个白痴. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |