понедельник, 27 мая 2013 г.

PHP опреатор ===

Продолжая эту тему. На php.net наткнулся на оператор "===". Жаль, что я совершенно забыл про него:


$a === $b
Тождественно равно TRUE если $a равно $b и имеет тот же тип.
Следует запомнить различие с:
$a == $b Равно TRUE если $a равно $b после преобразования типов.
Ведь при преобразовании типов false =0.

Так же другие операторы сравнения:
$a == $bРавноTRUE если $a равно $b после преобразования типов.
$a===$bТождественно равноTRUE если $a равно $b и имеет тот же тип.
$a != $bНе равноTRUE если $a не равно $b после преобразования типов.
$a <> $bНе равноTRUE если $a не равно $b после преобразования типов.
$a!== $bТождественно не равноTRUE если $a не равно $b или они разных типов.
$a < $bМеньшеTRUE если $a строго меньше $b.
$a > $bБольшеTRUE если $a строго больше $b.
$a <= $bМеньше или равноTRUE если $a меньше или равно $b.
$a >= $bБольше или равноTRUE если $a больше или равно $b.

четверг, 23 мая 2013 г.

PHP: русские символы и strtolower

Однажды заметил, что strtolower русские символы не приводит к нижнему регистру. Погуглив, обнаружил, что желательно дополнительно использовать функцию setlocale и устанавливать CP1251 кодировку.
После использования этой функции ничего не поменялось. Оказывается нужной кодировки может не быть в ОС. У меня Ubuntu. Установил нужную кодировку, в итоге опять не работает. В общем перепробовал много разных вариантов, существует довольно простой и главное рабочий:
$word=mb_strtolower($word,mb_detect_encoding($word));
Теперь все заработало!

PHP: отличие 0 от false

Как известно, в PHP: 0, false, NULL - являются одним и тем-же. Но довольно часто необходимо четко различать 0 от false. Например в таком случае. Существует строка str и существует - str2. Необходимо узнать: является ли строка str2 подстрокой str1. Это можно сделать с помощью функции strpos.

$str="Сергей" ;
          $str2="Сер";
          $pos=strpos($str,$str2);

Которая может вернуть позицию вхождения подстроки, либо может вернуть false - если подстрока в строке вообще не существует. Но тут также есть загвоздка. А что, если позиция вхождения подстроки будет равна 0?
Далее следует проверка. Неопытный программист, коим являюсь я сделает так:
if($pos!=false){
           //делаем то и то..
          }

Интерпретатор ошибки или предупреждения не выдаст, а вот программист голову может поломать довольно долго над тем, почем программа работает не так.

Избавление от этой проблемы приходит с использованием функции is_bool($a), которая возвращает true в случае если ТИП $a является boolean. Поэтому вместо предыдущего if пишем следующее:
if( ! is_bool($pos)){
          //что-то делаем..
          }


Вообще в PHP четко следует знать и следить за состоянием переменных и элементов массивов. И использовать следующие ряд функций: is_null(), empty(), isset().