Чат Telegram
Группа ВКонтакте
Новый комментарий


omk

Почему '05' == '5' true?
По идее оператору == не надо переводить в int, а сравнить 2 string. Но тогда строка '05' не равна строке '5'.

ivashkevich

Правильный вопрос! Ответ имеется в официальной документации, вот тут.

omk

Я немного не то имел ввиду, но ответ нашёл. Оказывается при сравнения типа string, стоки всегда переводятся в числа, а потом сравниваются. Тут

Daniil

У меня другое отображение:

<?php
$hello = 'Hello ';
$hello .= 'world!';
var_dump($hello);

Результат:

string(12) "Hello world!"
kertsad@gmail.com

Ты же зпросил не вывод а свойства строки. Вот он и выдал: это строка с 12 символами. Этими символами являются hello world! Чтобы запросить просто вывод пропиши echo $hello, тогда он выведет только то, что написано в строке.

Generalisimus
<?php
$a=5;
$b=$a!=true;
$c=$a!=0;
$d=$a!=true;
$e=$a=2&&3;
$f=$a=5&&0;
$j=$a=3||0;
$h=$a=5/1;
$k=$a=1/5;
$l=$a="5 + '5string'";
$m=$a='5'==5;
$n=$a='05'==5;
$o=$a='05'=='5';
var_dump($a);
var_dump($b);
var_dump($c);
var_dump($d);
var_dump($e);
var_dump($f);
var_dump($j);
var_dump($h);
var_dump($k);
var_dump($l);
var_dump($m);
var_dump($n);
var_dump($o);

?>

//Только не пропобал поставить <br/>или \n или \r не получилось

Generalisimus

результат

bool(true) 
bool(false)
bool(true)
bool(false)
bool(true)
bool(false)
bool(true)
int(5)
float(0.2)
string(13) "5 + '5string'" 
bool(true)
bool(true)
bool(true)
Generalisimus

и еще сам себе рейтинг поставил -1)))жалко нельзя редактировать коммент

ivashkevich

Спасибо за обратную связь, добавил возможность редактировать комментарии. И оформляйте код с помощью markdown-разметки.

vasyaproject

Честно говоря, не очень понял, че надо сделать в ДЗ, хорошо бы, если ответы были бы на какой-нибудь странице, чтобы сверить. Что значит получить !1 ? Такой что ли:

$x = !1;
var_dump($x);
ответ bool(false)
ivashkevich

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

vasyaproject

ок, спасибо

Tays

Здравствуйте.
5 + '5string'; - Notice: A non well formed numeric value encountered
Почему нужно обязательно брать кавычки?

ivashkevich

Здравствуйте. Потому что это строка. А PHP Вас в свою очередь уведомил, что вы складываете строку с числом, что вообще говоря неверно.

bratko

Так это просто мы должны были увидеть, что PHP нас уведомляет, что нельзя число складывать со строкой или нам нужно ещё что-то с этим сделать?

bratko

Я понял, что если строка начинается с верного числового значения, будет использовано это значение - и в итоге мы получим int(10).
Но раз выдаёт уведомление "Notice: A non well formed numeric value encountered" - значит так нельзя делать?

ivashkevich

Да. Так делать нельзя.

serb2017

!1 is bool(false)
!0 is bool(true)
2 && 3 is bool(true)
5 && 0 is bool(false)
3 || 0 is bool(true)
5 / 1 is int(5)
1 / 5 is float(0.2)
5 + '5string' is int(10)
'5' == 5 is bool(true)
'05' == 5 is bool(true)
'05' == '5' is bool(true)

markEvillive

Код

<?php
var_dump(!1);//Очевидно, так как 1 это true - bool(false))
echo '<br>';
var_dump(!0);//0 воспринимается как false - bool(true)
echo '<br>';
var_dump(!true);//Очевидно, обратное значение true это false - bool(false))
echo '<br>';
var_dump(2 && 3);//Оба значения не false - bool(true)
echo '<br>';
var_dump(5 && 0);//Второе значение 0 - bool(false)
echo '<br>';
var_dump(3 || 0);//Хотя бы один из операндов (3) true - bool(true)
echo '<br>';
var_dump(5 / 1);//Деление дает целое число - int(5)
echo '<br>';
var_dump(1 / 5);//Деление дает дробное число - float(0,2)
echo '<br>';
var_dump(5 + '5string');//Если строка начинается с верного числового значения, будет использовано это значение  - int(10)
echo '<br>';
var_dump('5' == 5);//Во всех трех следующих случаях работает преобразование строк в числа - bool(true)
echo '<br>';
var_dump('05' == 5);// bool(true)
echo '<br>';
var_dump('05' == '5');//bool(true)
echo '<br>';
?>

Результат

bool(false)
bool(true)
bool(false)
bool(true)
bool(false)
bool(true)
int(5)
float(0.2)
int(10)
bool(true)
bool(true)
bool(true)

P.S: Некоторые трудности возникли с пониманием того, как работает префиксный инкремент и декремент.

ivashkevich

Трудности ещё остались?

markEvillive

Нет, попробовал покопаться в инкрементах/декрементах самостоятельно, и понял.

ivashkevich

Отлично!)

Koala

Решение

    echo 'ДЗ <br>';
    var_dump(!1);
    echo '<br>';
    var_dump(!0);
    echo '<br>';
    var_dump(!true);
    echo '<br>';
    var_dump(2 && 3);
    echo '<br>';
    var_dump(5 && 0);
    echo '<br>';
    var_dump(3 || 0);
    echo '<br>';
    var_dump(5 / 1);
    echo '<br>';
    var_dump(1 / 5 );
    echo '<br>';
    var_dump(5 + '5string');
    echo '<br>';
    var_dump('5' == 5);
    echo '<br>';
    var_dump('05' == 5);
    echo '<br>';
    var_dump('05' == '5');

Результат

ДЗ 
bool(false) 
bool(true) 
bool(false) 
bool(true) 
bool(false) 
bool(true) 
int(5) 
float(0.2) 

Notice: A non well formed numeric value encountered in C:\Users\Администратор\Documents\WSK\Git\HowToMakeSites-PHP-\1st.steps\3les.php on line 52
int(10) 
bool(true) 
bool(true) 
bool(true)

P.S: Курс понравился буду проходить дальше :smile:

Koala

Оу, не поддерживает emodji ((

ivashkevich

Только символы, только хардкор! Удачи в прохождении :)

nemo.dont@gmail.com

код
echo '!1 ';
var_dump(!1);
echo '<br>';

echo '!0 ';
var_dump(!0);
echo '<br>';

echo '!true ';
var_dump(!true);
echo '<br>';

echo '2 && 3 ';
var_dump(2 && 3);
echo '<br>';

echo '5 && 0 ';
var_dump(5 && 0);
echo '<br>';

echo '3 || 0 ';
var_dump(3 || 0);
echo '<br>';

echo '5 / 1 ';
var_dump(5 / 1);
echo '<br>';

echo '1 / 5 ';
var_dump(1 / 5);
echo '<br>';

echo '5 + \'5string\' ';
var_dump(5 + '5string');
echo '<br>';

echo '\'5\' == 5 ';
var_dump('5' == 5);
echo '<br>';

echo '\'05\' == 5 ';
var_dump('05' == 5);
echo '<br>';

echo '\'05\' == \'5\' ';
var_dump('05' == '5');
echo '<br>';

то что выводится в браузере
!1 bool(false)
!0 bool(true)
!true bool(false)
2 && 3 bool(true)
5 && 0 bool(false)
3 || 0 bool(true)
5 / 1 int(5)
1 / 5 float(0.2)
5 + '5string' int(10)
'5' == 5 bool(true)
'05' == 5 bool(true)
'05' == '5' bool(true)

ivashkevich

Отлично!

anastasiia.khaliuk@yandex.ru

Почему-то не получается открыть в браузере, в прошлом задании (делала несколько дней назад) все получалось. Теперь по адресу http://myproject.loc/index.php выдает следующее: "Не удается получить доступ к сайту
Сайт myproject.loc не позволяет установить соединение."

ivashkevich

OpenServer не запущен =)

Dilik

Честно говоря чего то не догнал суть домашки...
По идее просто в var_dump проставить все эти выражения?!

ivashkevich

Да, просто сначала предположите результаты, а затем сравните их с тем, что получается на самом деле.

ArtemijeKA

Доброго времени суток! Можно узнать, что за расширение показывает разными цветами вывод var_dump(); в браузере?

ivashkevich

Привет! XDebug. С ним вы еще столкнетесь через пару уроков.

rlean

Здравствуйте! У меня PHPStorm при написании кода var_dump ( expression: '05' == '5' ); сам добавляет выражение expression: всегда. Избавиться от этого не получилось самостоятельно. Должно ли так быть и на что это влияет? Спасибо!

ivashkevich

Здравствуйте, в настройках шторма можете убрать, называется "Show parameter name hints"

paradise1983@icloud.com

Прошу прощения, но если честно непонятно задание.
Что нужно делать с этими значениями?
!1
!0
!true
2 && 3
5 && 0
3 || 0
5 / 1
1 / 5
5 + '5string'
'5' == 5
'05' == 5
'05' == '5'


Я ж могу из через string вывести.
Например, в описываемом уроке не нашёл аналогичные результаты примеров:
!1
!0
!true

ivashkevich

Здравствуйте, задание просто для того, чтобы ознакомиться с тем, как работает приведение типов в PHP =)
Можно просто проверить себя - предполагаете, какой должен получиться результат и смотрите что на самом деле.

Pavel-Tonk

В части "Логические операторы" ошибка xor – исключающее ИЛИ, вернёт true, только если один из операторов(операндов) true, а другой – false

ivashkevich

Спасибо, исправил =)

fapchat2@gmail.com
<?php

$x = 2;
$y = '2';

var_dump($x == $y); //проверка на равенство
var_dump($x === $y); //проверка на тождественное равенство
var_dump($x != $y); //проверка на неравенство
var_dump($x !== $y); //проверка на тождественное неравенство
Результат:

boolean true
boolean false
boolean false
boolean true

Разве во 2 примере не должен быть true, а в 4 - false????

ivashkevich

Число 2 не является тождественно равным строке '2'. У них разные типы: число и строка.

rashik-2009@yandex.ru

У меня вопрос по этой ситуации:
Почему 2 && 3 выводит true?
Вот ситуацию (5 && 0) я понял так, так как "0" это по умолчанию false, то оператор && выводит false потому что, одно из значений false.

По поводу ситуации (2 && 3), я предполагаю, что все числа, кроме "0" это true, так?

ivashkevich

Да, при приведении к bool ненулевые числа будут преобразованы к true.

Nick

Вкратце, при логических операциях, int и string приводятся к boolean, где 0 и "" (пустая строка) = false, все другие значения = true.

При математических операциях, всегда приводит к int только string, при условии что туда записано число, или строка начинается с числа (все что после числа игнорируется, кстати дробное число тоже нормально "обрезается" из строки), в иных случаях, при попытке привести к int string, php будет ругаться.

При соединении строк int, и boolean (преобразуется в int) переводятся в string. (10->"10", false->"0")

При не строгом сравнении (==, !=), данные приводятся к одному типу, и сравниваются, при строгом (===, !===), сравнивание проходит без приведения типов, сравнение разных типов в этом случае вернет false.

При сравнениях типа <, >, <=, >=, также происходит приведение типов. Также при сравнениях, false = 0, true = 1.

Ну вот как то так. Я ничего не упустил?

ivashkevich

Верно

eoskatrin11@gmail.com

Ура! Есть понимание что, откуда и почему!
bool(false) bool(true) bool(false) bool(true) bool(false) bool(true) int(5) float(0.2) int(10) bool(true) bool(true) bool(true)

ivashkevich

Отлично! =)

Dram

Добрый день, мне не понятно почему тут результат
var_dump(!1) = bool(false)
var_dump(!0) = bool(true)

То что ! ОТРИЦАНИЕ, возвращает true, если операнд – false, и наоборот,я понял.
Но почему 0 и 1 выдают разный результат, ведь это оба простые числа, тип INT.
Когда мы поставили ! мы изменили тип INT на bool, это я понял. Но с чем сравнение идет? Почему разные результаты - не понял, прошу помочь понять.

Или 0 в пхп по сути синоним false ?

ivashkevich

0 при преобразовании к boolean приводится к false.

kamil-uzd@yandex.ru
$var = [!1, !0, !true, 2 && 3, 5 && 0, 3 || 0, 5 / 1, 1 / 5, 5 + '5string', '5' == 5, '05' == 5, '05' == '5'];
for ($v = 0; $v < count($var); $v++)
{
    echo '<br>';
    var_dump($var[$v]);
}

Ответы
bool(false)
bool(true)
bool(false)
bool(true)
bool(false)
bool(true)
int(5)
float(0.2)
int(10)
bool(true)
bool(true)
bool(true)

ivashkevich

Отлично. А можно было и без цикла вывести всё разом через var_dump. Но это очень хорошо, что вы этими знаниями уже обладаете.

kamil-uzd@yandex.ru

Хорошие уроки очень.
Через var_dump() вы наверное это имели в виду?

$var = [!1, !0, !true, 2 && 3, 5 && 0, 3 || 0, 5 / 1, 1 / 5, 5 + '5string', '5' == 5, '05' == 5, '05' == '5'];
echo '<pre>';
var_dump($var);
echo '</pre>';
ivashkevich

Именно так!

NrG

Артем, а логический оператор xor в своей работе используешь?

ivashkevich

Крайне редко. 1 или 2 раза приходилось за всё время работы применить.

Онлайн-курсы PHP и MySQL
Обучение с полного нуля до уровня джуниора!
Начать бесплатно
Логические задачи с собеседований