Обучение/Помощь новичкам | help c скриптом

$lng = isset($_GET['lng']) ? $_GET['lng'] : '';
$_GET['lng'] = null;
$lng = isset($_GET['lng']) ? $_GET['lng'] : '';
var_dump($lng); // string(0) ""
$lng = array_key_exists('lng', $_GET) ? $_GET['lng'] : '';
var_dump($lng); // NULL


$_GET['lng'] = null;
$lng = isset($_GET['lng']) ? $_GET['lng'] : '';
var_dump($lng); // string(0) ""
$lng = array_key_exists('lng', $_GET) ? $_GET['lng'] : '';
var_dump($lng); // NULL

☝ Ты тут создал элемент массива со значением null. В примере автора его (этого элемента) вообще нет, так что разницы не будет


$_GET['lng'] = null;
☝ Ты тут создал элемент массива со значением null. В примере автора его (этого элемента) вообще нет, так что разницы не будет

нужно не из говнокода копипастить примеры, а сначала читать документацию
если нам нужно проверить, есть ли в массиве элемент, то используется array_key_exists, а если нам нужно ещё проверить, что переменная пришла извне и детектировать метод, которым она пришла, то используется filter_has_var(INPUT_GET, 'lng'), если нужно присвоение, то filter_input(INPUT_GET, 'lng')
правильное решение данного вопроса
$lng = filter_input(INPUT_GET, 'lng');
$log = filter_input(INPUT_GET, 'log');

при чём тут есть или нет, смысл моего примера в том, что для проверки наличия элемента массива используется неправильная функция и для неё документация чётко гласит - iseet Определяет, объявили ли переменную и отличается ли её значение от null
нужно не из говнокода копипастить примеры, а сначала читать документацию
если нам нужно проверить, есть ли в массиве элемент, то используется array_key_exists, а если нам нужно ещё проверить, что переменная пришла извне и детектировать метод, которым она пришла, то используется filter_has_var(INPUT_GET, 'lng'), если нужно присвоение, то filter_input(INPUT_GET, 'lng')
правильное решение данного вопроса
$lng = filter_input(INPUT_GET, 'lng');
$log = filter_input(INPUT_GET, 'log');
Во-первых, я просто переписал код
$lng = $_GET['lng'] ?? '';
, но под php 5.Во вторых, если не считать нюанс с null, (тем более что в массиве GET могут быть только строки), в данном случае isset() подходит лучше чем array_key_exists(), т.к. пишется короче и более производителен. Ненамного, но всё же.
Учись

в документации по isset нет ни единого упоминания о работе с массивами, потому что эта функция из раздела документации ДЛЯ РАБОТЫ С ПЕРЕМЕННЫМИ, для работы с массивами есть отдельный раздел документации
?? - тернарный оператор объединения с null, в PHP 5 работать не будет, только в PHP 7 и выше, замена на isset невозможна, так как идёт работа с массивом, в котором элемент может СУЩЕСТВОВАТЬ И быть равен NULL
isset не будет производительнее, так как это функция для работы с переменными, но не массивами, производительность тут вообще не при чём, потому что интерпретатор запускается один раз и уже запущен
нюанс с NULL и пустой строкой не прокатит, если используется строгая типизация типов declare(strict_types=1) - NULL не будет приведен к пустой строке и фокус с возложением интерпретации на плечи PHP - провалится
правильный ответ
________
посл. ред. 13.03.2025 в 12:37; всего 1 раз(а); by Вилы Выкидные

?? - тернарный оператор объединения с null, в PHP 5 работать не будет, только в PHP 7 и выше, замена на isset невозможна, так как идёт работа с массивом, в котором элемент может СУЩЕСТВОВАТЬ И быть равен NULL
isset не будет производительнее, так как это функция для работы с переменными, но не массивами, производительность тут вообще не при чём, потому что интерпретатор запускается один раз и уже запущен
нюанс с NULL и пустой строкой не прокатит, если используется строгая типизация типов declare(strict_types=1) - NULL не будет приведен к пустой строке и фокус с возложением интерпретации на плечи PHP - провалится

правильный ответ
$lng = filter_input(INPUT_GET, 'lng');
$log = filter_input(INPUT_GET, 'log');
________
посл. ред. 13.03.2025 в 12:37; всего 1 раз(а); by Вилы Выкидные

в документации по isset нет ни единого упоминания о работе с массивами, потому что эта функция из раздела документации ДЛЯ РАБОТЫ С ПЕРЕМЕННЫМИ, для работы с массивами есть отдельный раздел документации

?? - тернарный оператор объединения с null, в PHP 5 работать не будет, только в PHP 7 и выше, замена на isset невозможна, так как идёт работа с массивом, в котором элемент может СУЩЕСТВОВАТЬ И быть равен NULL
isset не будет производительнее, так как это функция для работы с переменными, но не массивами, производительность тут вообще не при чём, потому что интерпретатор запускается один раз и уже запущен
нюанс с NULL и пустой строкой не прокатит, если используется строгая типизация типов declare(strict_types=1) - NULL не будет приведен к пустой строке и фокус с возложением интерпретации на плечи PHP - провалится

правильный ответ
$lng = filter_input(INPUT_GET, 'lng');
$log = filter_input(INPUT_GET, 'log');
А переменная разве не может содержать массив?
> isset не будет производительнее
Будет, проверяли
А теперь идем в документацию
https://www.php.net/manual/ru/function.isset.php
... и видим что isset() используется в том числе и для массивов

> нюанс с NULL и пустой строкой не прокатит, если используется строгая типизация типов declare(strict_types=1) - NULL не будет приведен к пустой строке и фокус с возложением интерпретации на плечи PHP - провалится

https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRk0KD75o7jSUeq...HFSS1zYwpg&s
________
посл. ред. 13.03.2025 в 13:20; всего 2 раз(а); by Something
> типизация типов

Замечание:
Строгая типизация определяется только для объявлений скалярных типов.
То есть происходит типизация типов данного примитива
Научись читать документацию:
документация указывает, что элемент может существовать и иметь значение NULL, поэтому использовать нужно array_key_exists и делать это с массивами нужно в любом случае, потому что неизвестно какой элемент может существовать и иметь значение NULL
Строгая типизация определяется только для объявлений скалярных типов.
То есть происходит типизация типов данного примитива

$a = NULL;
$b = '';
var_dump($a == $b); // true - NULL приведен к пустой строке
var_dump($a === $b); // false - ПРОВАЛ
Научись читать документацию:
// Элемент с ключом "hello" равен NULL, поэтому он считается неопределённым.
// Если нужно проверить существование ключей со значением NULL, делают так:
var_dump(array_key_exists('hello', $a)); // TRUE
документация указывает, что элемент может существовать и иметь значение NULL, поэтому использовать нужно array_key_exists и делать это с массивами нужно в любом случае, потому что неизвестно какой элемент может существовать и иметь значение NULL

Всем добрый день. есть ошибок в index.php
может подсказать как правильно исправлять?
index.pho закрепил.
1.- Notice: Undefined index: lng in /var/home/swordhos/public_html/index.php on line 5
2.- Notice: Undefined index: log in /var/home/swordhos/public_html/index.php on line 8
$lng = filter_input(INPUT_GET, 'lng');
$log = filter_input(INPUT_GET, 'log');

Замечание:
Строгая типизация определяется только для объявлений скалярных типов.
То есть происходит типизация типов данного примитива

$a = NULL;
$b = '';
var_dump($a == $b); // true - NULL приведен к пустой строке
var_dump($a === $b); // false - ПРОВАЛ
Научись читать документацию:
// Элемент с ключом "hello" равен NULL, поэтому он считается неопределённым.
// Если нужно проверить существование ключей со значением NULL, делают так:
var_dump(array_key_exists('hello', $a)); // TRUE
документация указывает, что элемент может существовать и иметь значение NULL, поэтому использовать нужно array_key_exists и делать это с массивами нужно в любом случае, потому что неизвестно какой элемент может существовать и иметь значение NULL
Вызовите скорую, тут мужику плохо
