Имя: Пароль:
IT
Веб-мастеринг
странность в PHP
0 vde69
 
16.05.20
22:37
что-то странное у меня в PHP (WordPress),  

вот так работает (файл подключается) и печатает "тут"
    if (  true == true  ) {
        echo "тут";
        theme_include_lib('admin_page_db_print.php');
    }


а вот так печатает "тут" но файл не подключается (или подключается но не работает)
    if (  $fl == true  ) {
        echo "тут";
        theme_include_lib('admin_page_db_print.php');
    }


в логах ошибки нет...

чем отличаются эти 2 кода?
1 Garykom
 
гуру
16.05.20
22:51
$fl == true
true == true
2 Garykom
 
гуру
16.05.20
22:54
(1)+ В смысле в одном и том же месте меняешь условие и подключение ведет себя по разному?
Или все же в разных местах вызываешь?
3 vde69
 
16.05.20
22:55
и там и там печатает "тут", то есть в условие заходит
4 vde69
 
16.05.20
22:55
(2) в одном и том же
5 vde69
 
16.05.20
22:58
при чем самое странное, что файл загружается, но по разному работает, то есть в обоих случаях функции из файла доступны, но работают по разному
6 vde69
 
16.05.20
22:59
похоже внутри этого загружаемого файла видимость контекста или других загруженых файлов разная
7 Garykom
 
гуру
16.05.20
23:04
(3) Тогда проблема двойного подключения, первый раз ок а на повторное глючит
8 vde69
 
16.05.20
23:08
(7) не похоже, добавил проверку

    if ( ($_GET['page'] == "theme_db_admin_menu") && !function_exists ( "theme_print_db_page_cron" ) ) {
        $fl = true;        
    } else {
        $fl = false;        
    }


все по старому
9 Garykom
 
гуру
16.05.20
23:13
(8) Попробуй на другой железке
10 Garykom
 
гуру
16.05.20
23:14
(9)+ Если это твой NAS то могут быть проблемы разные, банально объем ram и прочие глюки
11 vde69
 
16.05.20
23:17
(10) я локально апач давно поставил, так на много удобнее
12 Гончий
 
17.05.20
01:23
(0) Это нормально, это же пхп.
13 MyNick
 
17.05.20
08:30
В РНР же на равенство нужно тремя === проверять.
14 MyNick
 
17.05.20
08:32
(12) синтаксис для начала надо знать. Чтобы не говорить - это же рнр, это же 1с,это же java, и тп
15 MyNick
 
17.05.20
08:33
== это без приведения к типу
=== это с приведением. Вроде так.

А что отладчик говорит?
16 Сияющий в темноте
 
17.05.20
12:05
возможно
оно один раз ввзывается,когда переменная false,а потом,когда true,и тогда явно по разному будет
17 vde69
 
17.05.20
12:58
я разницу понял:

первый код (true==true) обрабатывается при компиляции и второй раз проходит при рунтайме
второй код ($fl == true) не обрабатывается при компиляции а внутрь заходит только при выполнении кода (рунтайм)

сейчас буду разбираться почему в этих случаях функционал по разному работает
18 MyNick
 
17.05.20
14:45
(17) говорюж на равенство надо проверять через ===
Потому что динамическая типизация
19 MyNick
 
17.05.20
14:48
20 MyNick
 
17.05.20
14:49
П.2
21 vde69
 
17.05.20
14:52
(18) какая разница как сравнивать?

Ведь сравнение срабатывает и так, о чем говорит вывод строки... То есть внутрь условия попадает в обоих случаях.
22 MyNick
 
17.05.20
14:56
Вывод у тебя по true == true
23 vde69
 
17.05.20
14:59
(22) выводит в обоих случаях

вот так работает (файл подключается) и печатает "тут"
    if (  true == true  ) {
        echo "тут"; // это ПЕЧАТАЕТ
        theme_include_lib('admin_page_db_print.php');
    }


а вот так печатает "тут" но файл не подключается (или подключается но не работает)
    if (  $fl == true  ) {
        echo "тут";  // это ПЕЧАТАЕТ
        theme_include_lib('admin_page_db_print.php');
    }
24 vde69
 
17.05.20
15:03
причину кривого поведения я нашел, у меня во втором случае в обработчике AJAX переменная $_GET не содержит нужных мне данных

то есть вопрос окружения
25 vde69
 
17.05.20
15:44
короче, в одном случае у меня не правильно срабатывает подключение хука, подключенная  функция никогда не срабатывает, видимо надо смотреть очередь и время подключения

add_action('wp_ajax_theme_up_forms', 'theme_up_forms_ajax');
26 vde69
 
17.05.20
15:45
27 vde69
 
17.05.20
16:29
короче я решил сдаться, тем более, что весь смысл моей задачи был в более рациональном использовании памяти, но видимо этот уровень магии еще мне не доступен :)

пока сделаю подключение модулей на постоянку, без доп условия.
Независимо от того, куда вы едете — это в гору и против ветра!