Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
30 / 45 / 19
Регистрация: 18.07.2018
Сообщений: 578
1

Путаница с булевыми

17.12.2018, 17:21. Показов 1594. Ответов 15
Метки нет (Все метки)

Здравствуйте!

тут всё нормально

PHP
1
2
3
if ($uid) {
    define('UID', $uid->id);
}
и тут всё нормально

PHP
1
2
3
if ($uid !== false) {
    define('UID', $uid->id);
}
тут PhpStorm выдаёт мессагу - Field 'id' not found in bool

PHP
1
2
3
if ($uid === true) {
    define('UID', $uid->id); // <- косяк тута
}
Может я не о том думаю, но разве это не одно и то же условие?

Спасибо.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2018, 17:21
Ответы с готовыми решениями:

Функция с булевыми аргументами
Определить функцию,принимающую в качестве аргументов функцию и два булевых значения и возвращающую...

Загадка с Булевыми делами
Недавно начал изучать Python. Решаю задачи и воткнулся в загадочную ситуацию, когда False and True...

Коллекции. Операции с булевыми значениями. Random
Есть класс driver. public class Driver { private boolean ready_driver; private...

Программа для вычисления выражения с булевыми оперциями
не знаю куда писать, Надо написать прогу для вычисления выражения с булевыми оперциями. ...

15
502 bad gateway
Эксперт PHP
4608 / 3748 / 1565
Регистрация: 24.04.2014
Сообщений: 10,984
17.12.2018, 17:25 2
Лучший ответ Сообщение было отмечено Сынок как решение

Решение

Если выполняется 2 строчка, значит переменная $uix имеет тип bool. А у bool не может быть свойств
1
3253 / 2791 / 1403
Регистрация: 15.01.2014
Сообщений: 6,111
17.12.2018, 17:31 3
Цитата Сообщение от Сынок Посмотреть сообщение
Может я не о том думаю
100% не о том. )) true и false, по понятным причинам, не являются объектами. А если они таковыми не являются, то как у них может быть хоть какое-то свойство? Сравнение у вас тождественное, т.е. условие выполниться только в том случае, если переменной $uid ранее было присвоено именно значение true и никакое другое.
1
30 / 45 / 19
Регистрация: 18.07.2018
Сообщений: 578
17.12.2018, 17:35  [ТС] 4
Jewbacabra, то есть, если я читаю в документации, что fetchObject() возвращает объект или false, то объект нельзя проверить на true, потому что в доках не написано про true?

вот я тут путаюсь что-то
0
3253 / 2791 / 1403
Регистрация: 15.01.2014
Сообщений: 6,111
17.12.2018, 17:35 5
P.S. Я думаю, что у вас с операторами сравнения есть пробелы в знаниях. Вас бы удивил следующий результат?
PHP
1
2
3
<?php
var_dump(1 == true); // true
var_dump(1 === true); // false
Если да, то перечитайте документацию
1
30 / 45 / 19
Регистрация: 18.07.2018
Сообщений: 578
17.12.2018, 17:42  [ТС] 6
Lazy_Den, то есть я не могу проверить объект на true?

блин я запутался: разве не false - это не true?

Добавлено через 4 минуты
Jewbacabra, Lazy_Den, мля, вроде догнал, то есть объект нельзя проверить на тождественное значение в виде true, если запрос возвращает объект, а не тождественное значение true

правильно?
0
3253 / 2791 / 1403
Регистрация: 15.01.2014
Сообщений: 6,111
17.12.2018, 17:46 7
Лучший ответ Сообщение было отмечено Сынок как решение

Решение

Цитата Сообщение от Сынок Посмотреть сообщение
правильно?
Ход мыслей правильный. ))
Чтобы закрепить, разберем пример "на пальцах". Есть бутылка (переменная), вы можете проверить: заполнена она чем-то или нет:
в бутылке == жидкость
Если в ней действительно что-то есть (вода, пиво, лимонад, etc/), то условие верно. А можно сравнить не с жидкостью в общем, а с какой-то конкретной:
в бутылке === пиво
Условие сработает только в том случае, если там действительно пиво, а не какая-то другая жидкость.
0
pvzh
17.12.2018, 17:47
  #8

Не по теме:

Если есть шанс, что какой-то ключ у объекта или массива отсутствует, перед обращением к нему чаще всего делают проверку через isset(). Но если надо учесть все тонкости обработки пустых значений, есть варианты empty() и property_exists().

PHP
1
2
3
if (isset($uid->id)) {
    define('UID', $uid->id); // кстати, тут точно нужна константа?
}

0
30 / 45 / 19
Регистрация: 18.07.2018
Сообщений: 578
17.12.2018, 17:48  [ТС] 9
Lazy_Den, всё я понял, я просто логически в башке своей безмозглой получение объекта рассматриваю, как true )))

вопрос решён: либо объект со свойствами либо false

0
502 bad gateway
Эксперт PHP
4608 / 3748 / 1565
Регистрация: 24.04.2014
Сообщений: 10,984
17.12.2018, 17:49 10
Сынок, лучше всегда делать наиболее явным способом. Если в документации сказано что возвращает false или объект, то самый явный вариант проверять именно эти значения, про true в документации ничего не сказано и поэтому лучше его тут вообще не использовать
1
30 / 45 / 19
Регистрация: 18.07.2018
Сообщений: 578
17.12.2018, 17:53  [ТС] 11
Цитата Сообщение от pvzh Посмотреть сообщение
if (isset($uid->id)) {
у меня нет такого условия

Добавлено через 2 минуты
Jewbacabra, понял Вас, благодарю, я просто для проверки наличие объекта мысленно рассматривал, как true, типа: - Если есть, то true )))
0
502 bad gateway
Эксперт PHP
4608 / 3748 / 1565
Регистрация: 24.04.2014
Сообщений: 10,984
17.12.2018, 18:08 12
pvzh, так лучше в данной ситуации не делать. Возвращение false это штатная ситуация, значит в результирующей выборке больше строк нет. А отсутствие нужного столбца нет - и в большинстве случаев означает о логической ошибке в коде, которая чем раньше всплывет, тем лучше.
1
84 / 54 / 31
Регистрация: 04.12.2018
Сообщений: 141
17.12.2018, 18:23 13
Jewbacabra, пост #4 про fetchObject() проглядел, признаю. При обходе выборки действительно isset() без надобности. Ну не мог я ожидать, что внутри цикла будет define()
0
30 / 45 / 19
Регистрация: 18.07.2018
Сообщений: 578
17.12.2018, 18:32  [ТС] 14
Цитата Сообщение от pvzh Посмотреть сообщение
внутри цикла
где Вы видите цикл?

проверяется наличие объекта и устанавливается константа, всё просто

p.s. а если Вы думаете, что тут циклом устанавливается несколько значений константе, то и это не проблема: константы уже это умеют при помощи массива
0
pvzh
17.12.2018, 22:05
  #15

Не по теме:

Цитата Сообщение от Сынок Посмотреть сообщение
где Вы видите цикл?
Кода не вижу, но есть намёк на него в постах #4 и #12

Цитата Сообщение от Сынок Посмотреть сообщение
циклом устанавливается несколько значений константе, то и это не проблема
Мне даже в голову не придёт такое делать. Даже внутри if задавать константу не особо логично. Потому что константы служат другим целям.

0
30 / 45 / 19
Регистрация: 18.07.2018
Сообщений: 578
17.12.2018, 22:08  [ТС] 16
pvzh, всё, что Вы написали тут не относится к заданному вопросу
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2018, 22:08

Операции с булевыми массивами в классе выполняются, но возвращают неправильные результаты
class set {private: int max; int n; bool *a; public: set(int ms) { n=ms; max=ms;

Дана таблица с булевыми выражениями, некоторые элементы которой утеряны. Требуется восстановить таблицу
Пожалуйста, помогите решить задачу: Буль Имя входного файла: bool.in Имя выходного файла:...

путаница с ОС
Совсем запутался весь. Помогите решить проблему. Значит стояла 7, решил установить себе еще XP, на...

Путаница с доменами
День добрый. Никак в толк не могу для себя взять как лучше всё организовать. А ситуация следущая:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.