Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

в чём ошибка? php

53K
30 ноября 2009 года
yaufol
5 / / 30.11.2009
Делаю проект, к которому можно подключать модули. существует функция MODULE_EXISTS($string), которая проверяет наличие в массиве $MODULE_STRUCTURE элемента, равного $string.
дано:
модуль точно правильно подключён и есть совпадение $string хотябы с одним элементом массива $MODULE_STRUCTURE


в файле подключенного модуля идет проверка, к тому ли предку он подключён:
Код:
switch ($GLOBALS["PARENT_MODULE"])
{
    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;}
}


если вместо условия
 
Код:
if($flag){return true;}else{return false;}
поставить просто
 
Код:
return true;
то
 
Код:
if (MODULE_EXISTS("parentname,myname"))
срабатывает и функции модуля объявляются. но так, как описано выше - не работает. сломал голову - почему не работает???
помогите пожалуйста.
274
30 ноября 2009 года
Lone Wolf
1.3K / / 26.11.2006
хм.. а при == таком сравнении проблем не будет, че т туплю.. не правильней было бы strcmp пользовать?
244
30 ноября 2009 года
UAS
2.0K / / 19.07.2006
Что за унылый код? Причем, какой смысл всё капсом в коде писать? Тем более у вас ошибка в MODULE_EXISTS в виду того, что непроинициализирована переменная $flag.
Посчёт MODULE_EXISTS, то я бы написал по человечески так:
 
Код:
function MODULE_EXISTS($string)
{
    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;
}


Ещё было бы неплохо привести пример var_dump($GLOBALS["MODULE_STRUCTURE"]) в том примере, который тестируете. Так как иначе на Ваш вопрос ответить невозможно.

А если не используете принудитульную типизацию переменных, то юзайте ===. Также не забывайте про error_reporting(E_ALL).
53K
30 ноября 2009 года
yaufol
5 / / 30.11.2009
удивительно, но с strcmp всё работает вроде правильно. Спасибо.
но только абсолютно непонятно, почему с == не работало..
274
30 ноября 2009 года
Lone Wolf
1.3K / / 26.11.2006
Цитата: yaufol
удивительно, но с strcmp всё работает вроде правильно. Спасибо.
но только абсолютно непонятно, почему с == не работало..



а можно строчку с strcmp, меня терзают смутные сомнения.. если я окажусь не прав - я извинюсь

244
30 ноября 2009 года
UAS
2.0K / / 19.07.2006
Вызов strcmp как делаете? Результат сравниваете с нулем, надеюсь?

Цитата:
но только абсолютно непонятно, почему с == не работало


var_dump($GLOBALS["MODULE_STRUCTURE"]) сделайте и сразу понятно станет.

53K
30 ноября 2009 года
yaufol
5 / / 30.11.2009
Цитата: Lone Wolf
а можно строчку с strcmp, меня терзают смутные сомнения.. если я окажусь не прав - я извинюсь


 
Код:
if(strcmp($string,$GLOBALS["MODULE_STRUCTURE"][$i])){$flag=true;}

хм.. оказывается, если сравнить с 0 (т.е. строки равны) то выдаёт ошибку.
строки, как показывает var_dump, равны...
274
30 ноября 2009 года
Lone Wolf
1.3K / / 26.11.2006
как я и демал, про ноль успешно забыли..

результат var_dump-а в студию, да и регистр исмволов совпадает?
53K
30 ноября 2009 года
yaufol
5 / / 30.11.2009
 
Код:
var_dump($string);
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" }

цифра в конце - состояние модуля (подключен/нет)
274
30 ноября 2009 года
Lone Wolf
1.3K / / 26.11.2006
хм.. попробуй сделать то что советовал UAS обьявить изначально переменную flag, например. Ибо обьявляется она в цикле, и по идее вне цикла ее быть не должно.. Хотя это ПХП - тут все возможно
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог