2013-03-11 118 views
0

我有錯誤「使用未定義的常量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/'; 

,我沒有使用常數之前和一切工作正常。 他們有一個班。

+1

這些常量在哪裏定義? – 2013-03-11 17:56:57

+1

如果它們是類常量,那麼self :: PATH_TO_WORDS(假定在與它們相同的類中定義) – 2013-03-11 17:58:07

回答

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; 
+0

也許值得一提的是define()作爲使用現有語法的替代方法。 – 2013-03-11 17:58:34

0

只是定義的常量全球

define('PATH_TO_FILES_FROM_DB', 'userFiles/db/'); 
define('PATH_TO_WORDS', 'userFiles/fromFiles/'); 

或類中,比你通過self::CONSTANTNAME

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; 
    } 
}