2013-03-11 85 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; 
    } 
}