в чём ошибка? php
дано:
модуль точно правильно подключён и есть совпадение $string хотябы с одним элементом массива $MODULE_STRUCTURE
в файле подключенного модуля идет проверка, к тому ли предку он подключён:
Код:
switch ($GLOBALS["PARENT_MODULE"])
{
case "parentname":
{
if (MODULE_EXISTS("parentname,myname"))
{
...объявление функций модуля...
}
break;
}
case...
}
{
case "parentname":
{
if (MODULE_EXISTS("parentname,myname"))
{
...объявление функций модуля...
}
break;
}
case...
}
функция проверки:
Код:
function MODULE_EXISTS($string)
{
for($i=0;$i<count($GLOBALS["MODULE_STRUCTURE"]);$i++)
{
if($string==$GLOBALS["MODULE_STRUCTURE"][$i]){$flag=true;}
}
if($flag){return true;}else{return false;}
}
{
for($i=0;$i<count($GLOBALS["MODULE_STRUCTURE"]);$i++)
{
if($string==$GLOBALS["MODULE_STRUCTURE"][$i]){$flag=true;}
}
if($flag){return true;}else{return false;}
}
если вместо условия
Код:
if($flag){return true;}else{return false;}
Код:
return true;
Код:
if (MODULE_EXISTS("parentname,myname"))
помогите пожалуйста.
хм.. а при == таком сравнении проблем не будет, че т туплю.. не правильней было бы strcmp пользовать?
Посчёт MODULE_EXISTS, то я бы написал по человечески так:
Код:
function MODULE_EXISTS($string)
{
foreach( $GLOBALS["MODULE_STRUCTURE"] as $item)
{
if( $string === $item ) return true;
}
return false;
}
{
foreach( $GLOBALS["MODULE_STRUCTURE"] as $item)
{
if( $string === $item ) return true;
}
return false;
}
ну или хотя бы так:
Код:
function MODULE_EXISTS($string)
{
$flag = false;
foreach( $GLOBALS["MODULE_STRUCTURE"] as $item)
{
if( $string === $item ) {
$flag = true;
break;
}
}
return $flag;
}
{
$flag = false;
foreach( $GLOBALS["MODULE_STRUCTURE"] as $item)
{
if( $string === $item ) {
$flag = true;
break;
}
}
return $flag;
}
Ещё было бы неплохо привести пример var_dump($GLOBALS["MODULE_STRUCTURE"]) в том примере, который тестируете. Так как иначе на Ваш вопрос ответить невозможно.
А если не используете принудитульную типизацию переменных, то юзайте ===. Также не забывайте про error_reporting(E_ALL).
но только абсолютно непонятно, почему с == не работало..
Цитата: yaufol
удивительно, но с strcmp всё работает вроде правильно. Спасибо.
но только абсолютно непонятно, почему с == не работало..
но только абсолютно непонятно, почему с == не работало..
а можно строчку с strcmp, меня терзают смутные сомнения.. если я окажусь не прав - я извинюсь
Цитата:
но только абсолютно непонятно, почему с == не работало
var_dump($GLOBALS["MODULE_STRUCTURE"]) сделайте и сразу понятно станет.
Цитата: Lone Wolf
а можно строчку с strcmp, меня терзают смутные сомнения.. если я окажусь не прав - я извинюсь
Код:
if(strcmp($string,$GLOBALS["MODULE_STRUCTURE"][$i])){$flag=true;}
хм.. оказывается, если сравнить с 0 (т.е. строки равны) то выдаёт ошибку.
строки, как показывает var_dump, равны...
результат var_dump-а в студию, да и регистр исмволов совпадает?
Код:
var_dump($string);
var_dump($GLOBALS["MODULE_STRUCTURE"]);
var_dump($GLOBALS["MODULE_STRUCTURE"]);
Код:
string(14) "SUPPORT;MAIN;1" array(3) { [0]=> string(14) "SUPPORT;MAIN;1" [1]=> string(11) "USER;MAIN;1" [2]=> string(12) "PHOTO;MAIN;0" }
цифра в конце - состояние модуля (подключен/нет)
хм.. попробуй сделать то что советовал UAS обьявить изначально переменную flag, например. Ибо обьявляется она в цикле, и по идее вне цикла ее быть не должно.. Хотя это ПХП - тут все возможно