2013-06-25 2 views
0

нужно использовать PHP константу в статической переменной, но я обнаружил, что сегодня это не представляется возможным: Is a global PHP CONSTANT available inside of a Class file?PHP константы в статической переменной

define("TABLE_PREFIX", "TEST_"); 

class Test { 

    private static $sql_query = "select * from ".TABLE_PREFIX."USER"; 

    public static function show_query1() { 
     echo "My first test"; 
     echo self::$sql_query; 
    } 

    public static function show_query2() { 
     echo "My second test"; 
     echo self::$sql_query; 
    } 

} 


Test::show_query1(); 
Test::show_query2(); 

Я не хочу, чтобы передать константу в качестве аргумента статический и я не хочу объявлять $ sql_query в каждой статической функции.

Каков наилучший способ для этого?

EDIT: добавить демо = http://codepad.org/aqzj2TJh

+1

Вы можете использовать константу просто отлично. То, что вы не можете сделать, это использовать выражение, подобное '' concatenated '. "Strings". – Jon

+0

Вы нашли правильный ответ уже, вы просто не поняли его. – deceze

+0

@YogeshSuthar: классический приемник и сеттер работает только в контексте объекта. Я не хочу определять статический сеттер и называть его каждый раз ... (если есть другое решение) – Matth

ответ

1

Вы можете сделать то же самое с другим способом.

define("TABLE_PREFIX", "TEST_"); 
define("TEST_TABLE_QUERY", "select * from ".TABLE_PREFIX."USER"); 
class Test { 

    private static $sql_query = TEST_TABLE_QUERY; 

    public static function show_query1() { 
     echo "My first test"; 
     echo self::$sql_query; 
    } 

    public static function show_query2() { 
     echo "My second test"; 
     echo self::$sql_query; 
    } 

} 

Надеюсь, это может вам помочь.

+0

Спасибо Amit Kumar Sharma, это работает, но мои запросы sql очень большие, и я получаю перевод слов внутри них ... – Matth

+0

В этом случае вы можете использовать% s в определении («TEST_TABLE_QUERY», «выберите% s TABLE WHERE% s «); И чем может использовать sprinf() в вашем классе –