Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
Не может найти константу в функции |

08.06.2008, 11:04
|
|
Участник форума
Регистрация: 28.01.2008
Сообщений: 247
Провел на форуме: 205760
Репутация:
28
|
|
Не может найти константу в функции
Имеется функция:
Код:
function hwGetExtraOptions( )
{
global $db;
static $A_RES = NULL;
if ( isset( $A_RES ) )
{
return $A_RES;
}
$sql = "";
$a_v = array_keys( hwgetextraoptionids( ) );
foreach ( $a_v as $k )
{
if ( defined( "ADMIN_AREA" ) || constant( "EN_AD_{$k}" ) )
{
$sql .= ",'{$k}'";
}
}
$A_RES = array( );
if ( !$sql )
{
return $A_RES;
}
$a_v = $db->select( "SELECT * FROM ".TBL_EXTRA_OPT." WHERE type IN(".substr( $sql, 1 ).") AND active=\"1\" ORDER BY type,price" );
if ( hwismodeventallowed( "onExtraOptionsGet" ) )
{
$args = array(
"A_EXTRA" => $a_v
);
hwmodevent( "onExtraOptionsGet", &$args );
$a_v = $args['A_EXTRA'];
}
if ( $a_v )
{
$A_TRAN = hwlangphrase( );
if ( $A_TRAN )
{
foreach ( $a_v as $k => $v )
{
if ( $A_TRAN["ex_opt-{$v['id']}"] )
{
$a_v[$k]['descr'] = $A_TRAN["ex_opt-{$v['id']}"];
}
}
}
}
$a_v[] = false;
$a_fee = $a_descr = array( );
foreach ( $a_v as $v )
{
if ( isset( $p_v['type'] ) && $p_v['type'] != $v['type'] )
{
$id = "AD_{$p_v['type']}";
$A_RES[$id] = array(
"ID" => $id,
"NAME" => "{ex_".$p_v['type']."}",
"INPUT" => "menu",
"EN_ORD" => 1,
"DT" => EX_OPT_EXP * 86400,
"FEE" => $a_fee,
"DESCR" => $a_descr
);
$a_fee = $a_descr = array( );
}
$p_v = $v;
$a_fee[$v['val']] = $v['price'];
$a_descr[$v['val']] = $v['descr'];
}
return $A_RES;
}
Получаю сообщение об ошибке:
Warning: constant() [function.constant]: Couldn't find constant EN_AD_0 in Y:\home\localhost\www\mysite\inc\lib.inc.php on line 2134
Warning: constant() [function.constant]: Couldn't find constant EN_AD_1 in Y:\home\localhost\www\mysite\inc\lib.inc.php on line 2134
Warning: constant() [function.constant]: Couldn't find constant EN_AD_2 in Y:\home\localhost\www\mysite\inc\lib.inc.php on line 2134
Warning: constant() [function.constant]: Couldn't find constant EN_AD_3 in Y:\home\localhost\www\mysite\inc\lib.inc.php on line 2134
Проблема в строке:
Код:
if ( defined( "ADMIN_AREA" ) || constant( "EN_AD_{$k}" ) )
Какие будут соображения по устранению?
|
|
|

08.06.2008, 11:20
|
|
Постоянный
Регистрация: 16.02.2008
Сообщений: 724
Провел на форуме: 1025839
Репутация:
581
|
|
А они вообще задефинены? Если нет то все правильно 
|
|
|

08.06.2008, 11:28
|
|
Участник форума
Регистрация: 28.01.2008
Сообщений: 247
Провел на форуме: 205760
Репутация:
28
|
|
Ругается на это место:
Мне непонятны слова:
Couldn't find constant EN_AD_0
?
|
|
|

08.06.2008, 11:51
|
|
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме: 6023777
Репутация:
2642
|
|
попробуй что-ли так
Код:
if ( defined( "ADMIN_AREA" ) || @constant( "EN_AD_{$k}" ) )
|
|
|

08.06.2008, 11:56
|
|
Постоянный
Регистрация: 16.02.2008
Сообщений: 724
Провел на форуме: 1025839
Репутация:
581
|
|
Если они задефинены, то странновато это 
Да и зачем используется такая конструкция?
constant() will return the value of the constant indicated by name.
|
|
|

08.06.2008, 12:00
|
|
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме: 6023777
Репутация:
2642
|
|
Ну так поэтому в операторе If оно и используется. Я дал вариант, чтоб не выдавалась ошибка, если константа не задефинена.
etc, а как по-другому в названии константы ты будешь использовать $k?
Последний раз редактировалось NOmeR1; 08.06.2008 в 12:08..
|
|
|

08.06.2008, 12:32
|
|
Постоянный
Регистрация: 16.02.2008
Сообщений: 724
Провел на форуме: 1025839
Репутация:
581
|
|
Что если применить тот же defined ?
if ( defined( "ADMIN_AREA" ) || defined( "EN_AD_" . $k) )
|
|
|

08.06.2008, 12:51
|
|
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме: 6023777
Репутация:
2642
|
|
Смотри. К примеру дано такое:
Код:
define("CONST_ONE", 0);
define("CONST_TWO", 1);
Следи что вернут эти выражения:
Код:
var_dump(defined("CONST_ONE"));
var_dump(defined("CONST_TWO"));
Тут везде bool(true), поэтому выражения выполнятся если задефинено.
Далее пробуем
Код:
var_dump((bool)constant("CONST_ONE"));
var_dump((bool)constant("CONST_TWO"));
Здесь уже в первом случае bool(false), потому что при значение равном нулю (либо пустому значения) константы, выражение не выполнится.
Ну а последняя строчка вернёт bool(true) и выражение выполнится, так как значение константы положительно.
Последний раз редактировалось NOmeR1; 08.06.2008 в 12:54..
|
|
|

08.06.2008, 13:12
|
|
Постоянный
Регистрация: 16.02.2008
Сообщений: 724
Провел на форуме: 1025839
Репутация:
581
|
|
в случае нуля с моим примером можно вообще не дефинить 
|
|
|

08.06.2008, 14:40
|
|
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме: 16641028
Репутация:
2371
|
|
NOmeR1, ошибки надо не скрывать, а исправлять 
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|