PHP Undefined persistent error makes no sense

I really hope I missed something simple here, but I am having a weird problem using class constants in PHP. I created a simple class called Utils and added two class constants CRYPT_SALT and LOGIN_PAGE. I referenced those from other files and they worked. Then I added five more class constants and they do not work. I get "Fatal error: Undefined class constant" in /var/www/modx/test.php in line "where one of the new constants is located, and this is the line in which I am trying to use it.

Here is the Utils class:

<?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", '\\n', $val ); $val = str_replace( "\n", '\\n', $val ); return $val; } } ?> 

All member functions were written and tested before I added the class constants, they work.

And here is test.php, a simple test page to illustrate the problem:

 <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"; ?> 

The exact error I get from test.php is:

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

I tried to solve the following:

- Renaming constants, including using lower case names without underscores

- Changing the order of declarations.

- Switch between double and single quotes.

- Commenting ads for CRYPT_SALT and LOGIN_PAGE

- Show this code to my employees who are all ignorant

No matter what I try to execute, CRYPT_SALT and LOGIN_PAGE work, none of the other constants work. I am afraid that I am against some error in the PHP class system. Or maybe I just looked at it for so long that I miss the obvious.

+4
source share
2 answers

Yes,

Answer: I'm an idiot, as usual. :)

I had a second copy of utils.php in the main network directory. This early version (only with specific CRYPT_SALT and LOGIN_PAGE) was the one that was found by the autoloader.

@Paolo Bergantino and @David, you were absolutely right in suggesting that I include the file that I thought was. @hakre, thanks for the get_included_files hint.

+2
source

I tried my code on my system.

if you remove "require_once( "logger.php" );" in Utils.php , its performance.

so i am the thing the problem is in your lonnger.php file.

try it.

+1
source

All Articles