Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: О ==null is_null() isset

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: ох нагородили
eai
Отправлено: 23 Апреля, 2012 - 14:56:28
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




Немного о философии PHP

Вот мне совсем не понятно на кой вообще существует функция is_null
вместо if(is_null($a)) всегда можно написать if($a == null), причем вторая конструкция выполниться быстрее (а в случае с объектами вообще можно ограничиться if($a).

isset тоже вызывает некоторое недоумение. Сказано что определяет определена ли переменная или нет (отсюда и понятно ограничение что аргументом может быть только переменная но не результат функции), но если $a = null; isset($a) => true!!!!
Единственное полезное для себя нашел в isset это то что ей можно передать аргументом ссылку на несуществующий элемент массива и ошибку не выдаст ...
 
 Top
Мелкий Супермодератор
Отправлено: 23 Апреля, 2012 - 15:05:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




eai пишет:
на кой вообще существует функция is_null

Я использую для наглядности, когда хочу подчеркнуть, что здесь может быть null и это корректное значение.

eai пишет:
всегда можно написать if($a == null)

Неуд при $a=0;
+ за счёт чего быстрее-то?

eai пишет:
но если $a = null; isset($a) => true!!!!

Читайте мануал дальше, там это описано.


-----
PostgreSQL DBA
 
 Top
eai
Отправлено: 23 Апреля, 2012 - 15:27:16
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




Мелкий пишет:

eai пишет:
всегда можно написать if($a == null)

Неуд при $a=0;

Препода выгнать, не внимательный, я же написал что для объектов!

Мелкий пишет:

+ за счёт чего быстрее-то?
За счет отсуствия вызова функции

eai пишет:
но если $a = null; isset($a) => true!!!!

Читайте мануал дальше, там это описано.[/quote]
Дык думаешь я до чтения это написал ...
 
 Top
EuGen Администратор
Отправлено: 23 Апреля, 2012 - 15:37:16
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




eai пишет:
но если $a = null; isset($a) => true!!!!

Это несложно. Дело в том, что в PHP переменные хранятся в двух частях - указатель (вернее сказать, ссылка, так как это не настоящий C-указатель) и значение.
Если Вы присваиваете переменной значение null, то при этом ссылка на нее не уничтожается, поэтому isset возвращает true. В отличии от присвоения null, конструкция unset уничтожит и ссылку и значение, таким образом isset для такой переменной будет уже false. Например:
PHP:
скопировать код в буфер обмена
  1. $var="test";
  2. unset($var);
  3. var_dump($var);
  4. $var="test";
  5. $var=null;
  6. var_dump($var);

Код выше для unset сообщит Notice о необъявленной переменной, тогда как в случае установки null его не будет (хотя в обоих случаях и покажется NULL как результат)

По поводу
eai пишет:
a == null
- стоит учитывать, что оператор "==" неявно приводит типы данных, так что результат такого сравнения может быть неожиданным. Больше информации Вы найдете в таблицах сравнения.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 23 Апреля, 2012 - 15:46:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




eai пишет:
я же написал что для объектов!

0) вы написали 2 случая, if ($a==null) - ложное срабатывание
1) во втором:
PHP:
скопировать код в буфер обмена
  1. $xml = <<<XML
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <ok />
  4. XML;
  5. $a = new simpleXMLElement($xml);
  6.  
  7. if ($a) echo 'это не объект';

Где есть одно исключение, найдётся и другое. Но задокументирован сейчас только этот случай, ваша правда.

eai пишет:
За счет отсуствия вызова функции

Что ж вы тогда на PHP пишете? Погуляйте по сырцам, какие трассировки вызовов, кошмар! А уж какая прорва работы только на запуск!

eai пишет:
думаешь я до чтения это написал ...

Да, думаю, что не читали, иначе бы заметили, что это полностью задокументированная особенность.


-----
PostgreSQL DBA
 
 Top
eai
Отправлено: 23 Апреля, 2012 - 16:23:10
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




Мелкий пишет:

eai пишет:
За счет отсуствия вызова функции

Что ж вы тогда на PHP пишете? Погуляйте по сырцам, какие трассировки вызовов, кошмар! А уж какая прорва работы только на запуск!

Писание на PHP не исключает необходимость экономить на микросекундах особенно когда операции будут повторяться много раз.

Мелкий пишет:

eai пишет:
думаешь я до чтения это написал ...

Да, думаю, что не читали, иначе бы заметили, что это полностью задокументированная особенность.

Да, задокументирована, но не совсем логична, на мой взгляд.
Вопрос был не то что это так работает, а то что зачем же так нагородили.


Т.е. программист каждое сравнение доложен делать с учетом особенностей поведения типов ...

(Отредактировано автором: 23 Апреля, 2012 - 16:23:38)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB