Имеется функция: Code: 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; } Получаю сообщение об ошибке: Проблема в строке: Code: if ( defined( "ADMIN_AREA" ) || constant( "EN_AD_{$k}" ) ) Какие будут соображения по устранению?
Ну так поэтому в операторе If оно и используется. Я дал вариант, чтоб не выдавалась ошибка, если константа не задефинена. etc, а как по-другому в названии константы ты будешь использовать $k?
Смотри. К примеру дано такое: Code: define("CONST_ONE", 0); define("CONST_TWO", 1); Следи что вернут эти выражения: Code: var_dump(defined("CONST_ONE")); var_dump(defined("CONST_TWO")); Тут везде bool(true), поэтому выражения выполнятся если задефинено. Далее пробуем Code: var_dump((bool)constant("CONST_ONE")); var_dump((bool)constant("CONST_TWO")); Здесь уже в первом случае bool(false), потому что при значение равном нулю (либо пустому значения) константы, выражение не выполнится. Ну а последняя строчка вернёт bool(true) и выражение выполнится, так как значение константы положительно.
Решение - задефинить константы en_ad_0, en_ad_1, en_ad_2, en_ad_3. Какими значениями - не знаю, т.к. какую роль эти константы играют - не написано.
NOmeR1, наверное, ты прав. поставил Code: if ( defined( "ADMIN_AREA" ) || @constant( "EN_AD_{$k}" ) ) Теперь сообщений нет! Благодарю за помощь!
Учти, что это лишь способ убрать предупреждения, но не решить проблему. В твоем случае получается что второе условие вообще не работает.
PHP: if ( defined( "ADMIN_AREA" ) || ( defined( "EN_AD_".$k ) && constant( "EN_AD_".$k ) )) // может быть использовать ., И и defined?
NOmeR1, нельзя новичкам да и вообще никому писать посты как #4, потому что этим самым ты учишь скрывать ошибки, а как я сказал, их надо исправлять... Пост #12 сделал вывод =(
Ой ну чего ты приепался? Только что повторил свой предыдущий пост в этой теме. Вообще, я дал вполне логичный выход. Я на примере объяснил в посте #8. Если не задефинена константа, то условие @constant( "EN_AD_{$k}" ) вернёт false, то же самое что и если бы константа была задефинена и значение у неё было нулевое. В операторе IF так же используется условие defined( "ADMIN_AREA" ) - а это скорее всего значит, что константа ADMIN_AREA может быть задефинена, либо нет. Поэтому я считаю, что и константы EN_AD_0, EN_AD_1, EN_AD_2, EN_AD_3 тоже могут быть не задефинены, а это как раз и создаёт ошибки!