фишка заключается в том, что mb_detect_encoding принимает вторым параметром список кодировок из которых он и выбирает самую похожую на кодировку текста. Если его нет, использует список кодировок по умолчанию.
И работает он по принципу элиминации. Тоесть ищет в тексте символ не сущесвтующий в этой кодировке. Тоесть проходится по всем символам строки и проверяет есть ли такой символ в кодировке utf-8. Если все нашлись - значит это и есть кодировка.
а никак, потому, что переменная $a это локальная переменная функции 2
и за пределами функции она попросу не существует. Тоесть память выделенная компьютером
под эту переменную была стерта по завершению работы функции.
}
Для того, чтобы в действительности значение переменной сохранилось, переменную следует создать в глобальной области видимости. Тоесть в области памяти доступной всей программе, а не одной лишь самой функции.
Далее в самой функции вы прописываете что-то вроде global $a , тем самым давая функции доступ к памяти принадлежащей всей программе.
В работе с классами у вас появляется еще одна область видимости - самого класса.
Их становится три: область памяти(видимости) скрипта, область видимости класса и область видимости методов(функций) самого класса.
Для того, чтобы все методы(функции) класса имели доступ к одной переменной, ее надо зарегистрировать в области видимости выше, а в самих методах к ней обращаться.
Зарегистировать переменную в области класса и обращаться к ней можно следующим образом:
один лишь empty ответит notice: undefind variable $_GET...
а интрепретатору гораздо проще выполнить проверку isset, чем сгенерировать сообщение об ошибке, даже если оно не будет отображено.
Потому, что конструкция switch работает немного по другому.
Она сравнивает аргумент $d с тем, что написано в скобочках.
Тоесть происходит три сравнения
1. $d == ($d<0) что у него переводится в (false == false) = true и поэтому исполняется это
2. $d == ($d == 0)
3. $d == ($d >0)
можно сделать к примеру так
switch(true):
case ($d>0): break;
case ($d==0): break;
case ($d<0): break;
endswitch;
но лучше использовать в данном случае elseif так как у тебя всего три варианта и в одном из них нужно вовсе прекратить выполнение скрипта.