2015-01-30 5 views
0

Я использую функцию определения, чтобы изменить национальность в соответствии с полом (Im Italian отличаются по полу). Код работает, но когда я изменяю аргументы функции с другим, взятым из MySQL, функция перестает работать.Использовать переменную как define() аргумент

define("ITA", serialize(array("m" => "italiano", "f" => "italiana"))); 
define("ENG", serialize(array("m" => "inglese", "f" => "inglese"))); 
define("RUS", serialize(array("m" => "russo", "f" => "russa"))); 

function nationality($code, $gender) { 
    $nationality = unserialize($code); 
    return $nationality[$gender]; 
} 

echo nationality(ENG,'f'); //WORKS 

$nationality = $author['nationality']; 
echo nationality($nationality,'f'); //DOESNT WORKS 

EDIT: $ author ['nationality']; Выводится из MySQL

+3

Что такое '$ автора [ 'национальность' ] '? – kero

+0

Выведено из MySQL – WalterV

+0

Это не отвечает на вопрос. Что вы получаете, если вы 'var_dump()' it? – kero

ответ

2

попробовать код использования:

define("ITA", serialize(array("m" => "italiano", "f" => "italiana"))); 
define("ENG", serialize(array("m" => "inglese", "f" => "inglese"))); 
define("RUS", serialize(array("m" => "russo", "f" => "russa"))); 

function nationality($code, $gender) { 
    if(defined($code)) { 
     $nationality = unserialize(constant($code)); 
     return $nationality[$gender]; 
    } 
    return false; 
} 
+0

Отлично! благодаря – WalterV

5

Это потому, что вы передаете строку своей функции, а не константу.

Я предполагаю, что здесь, но выглядит как $author['nationality'], как представляется, либо «ENG», «ITA» и т.д. Для того, чтобы передать строку в качестве постоянного использования constant() функции, как это:

echo nationality(constant($nationality),'f'); 
+1

Почему нисходящий? –

+1

Не знаю, это кажется правильным. – AbraCadaver

2

Constant как ENG только существуют в исходном файле. Вы не можете рассматривать их как обычные строки. Вы никогда не используете/не передаете константу, вы используете или передаете отображаемое значение.

Вы можете использовать встроенный constant для поиска отображения:

constant($nationality) 

Но если все, что вам нужно, это посмотреть значение строки, хранить их в array.

(обратите внимание: там также нет необходимости в сериализации)

$languages = array(
    "ITA" => array("m" => "italiano", "f" => "italiana"), 
    ... 
); 

и использовать

$languages[$nationality] 
Смежные вопросы