常数问题

时间:2013-03-11 17:55:41

标签: php

我有错误"使用未定义的常量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/';

之前,我没有使用常量,一切正常。 他们有一个班级。

3 个答案:

答案 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

访问它们