我有错误"使用未定义的常量PATH_TO_WORDS - 假设' PATH_TO_WORDS'"。
private function changeFileName($fileName, $path) {
if ( $path == 'db') {
$path = PATH_TO_FILES_FROM_DB;
} elseif ( $path == 'file' ) {
$path = PATH_TO_WORDS; // there error
} else {
throw new Exception("Invalid path for file: $path");
}
$fileName = preg_replace('!\\s!', '', $fileName);
$fileName .= Yii::app()->user->id;
$wholePath = $path . $fileName;
return $wholePath;
}
和常数:
const PATH_TO_FILES_FROM_DB = 'userFiles/db/';
const PATH_TO_WORDS = 'userFiles/fromFiles/';
之前,我没有使用常量,一切正常。 他们有一个班级。
答案 0 :(得分:3)
看起来那些是类常量而不是全局常量,它们必须通过类来访问:
// anywhere
TheClassname::CONSTANT_NAME
// inside the class or a descendent class only
self::CONSTANT_NAME
如果它们应该是全局常量,那么您需要使用define()
函数来定义它们:
// definition
define('CONSTANT_NAME', 'thevalue');
// access from anywhere
CONSTANT_NAME;
答案 1 :(得分:1)
您使用的常量不正确,引用应为:
class foo {
const PATH_TO_FILES_FROM_DB = 'userFiles/db/';
function bar() {
$path = self::PATH_TO_FILES_FROM_DB;
^^^^^^----- need this
}
}
当你使用它们时,它们不是类常量,它们是标准的define()
常量,例如。
define('PATH_TO_FILES_FROM_DB', 'userFiles/db/');
class Foo {
function bar:
$path = PATH_TO_FILES_FROM_DB;
}
}
答案 2 :(得分:0)
只需定义你的常量全局
define( 'PATH_TO_FILES_FROM_DB', 'userFiles/db/' );
define( 'PATH_TO_WORDS', 'userFiles/fromFiles/' );
或在您的班级内,而不是通过self::CONSTANTNAME