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 :: Что означает следующая конструкция...
defined('SYSPATH') or exit('Install tests must be loaded from within index.php!');
Поправьте если я ошибаюсь: "Если не объявлена константа SYSPATH, то происходит выход из скрипта с сообщением Install tests must be loaded from within index.php!";
То же самое можно описать следующим, более понятным для меня образом:
die('Install tests must be loaded from within index.php!');
В чем разница между первым и вторым способом и какой из способов преимущественно использовать в повседневной работе?
OrmaJever
Отправлено: 05 Марта, 2014 - 22:41:25
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
впервые вижу что бы проверку константы делали первым способом, но судя по всему он имеет место быть.
В первом случае оператор or выполняет вначале левую часть условия, если она true то условие будет true и нету смысла выполнять правую часть, если же false то выполняется правая часть, такой вот лайф хак
А так оба условия делают одну и туже функцию.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
MAXUS
Отправлено: 06 Марта, 2014 - 04:46:36
Посетитель
Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011
Помог: 7 раз(а)
Ухты... Прикольно...
Единственное, обе половины or должны что-то возвращать. А так, интересно можно использовать... И не только с or... Например:
Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012
Помог: 1 раз(а)
Спасибо за пояснения, рад, что тема оказалась полезной. Да это я давеча решил кохану по кирпичикам разобрать до фнудамента, вот сижу и разбираю print-ером и die()'ем. И вдруг встречаю такие вот непонятные мне конструкции, доселе мною неиспользуемые. Если что непонятного нарою, будут в этой теме спрашивать.
DelphinPRO
Отправлено: 06 Марта, 2014 - 08:58:13
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
OrmaJever пишет:
впервые вижу что бы проверку константы делали первым способом, но судя по всему он имеет место быть
В джумле каждый файл начинается с defined('_JEXEC') or die;
А в javascript такие конструкции вообще на каждом шагу... странно что не встречали ранее. )
MAXUS фишка прикольная и удобная, но не надо фанатизма
----- Чем больше узнаю, тем больше я не знаю.
Ch_chov
Отправлено: 06 Марта, 2014 - 09:42:27
Постоянный участник
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
DelphinPRO пишет:
А в javascript такие конструкции вообще на каждом шагу...
Они только с виду похожи. В PHP результат логической операции всегда имеет тип bool. Поэтому такой вот трюк в PHP не работает:
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
nkl
Отправлено: 10 Марта, 2014 - 22:43:06
Посетитель
Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012
Помог: 1 раз(а)
Кажись я понял. var_dump ((bool) '') вернет нам bool(false), но var_dump ('') вернет нам string(0) ""; В данном случае это делается для явного указания типа данных который храниться в переменной $settings['profile'], так? Хотя если мы запишем в неё true, то делать это не обязательно, хотя с другой стороны, если мы сделаем так $settings['profile'] = '', то используя (bool)$settings['profile'] мы получим bool(false). Поправьте если я ошибаюсь. (Добавление)
Ох ты ж епт! Ни х себе я открытие для себя сделал! Так это даже если написать так var_dump((bool) 'asdasd') нам вернется bool(true)!!! (Добавление)
Это все конечно хорошо, только я вот не пойму дальнейшего смысла проверок... Вот например таких:
Почему бы не написать просто if (Kohana::$errors) ? Или это своего рода защита от того, что в переменную Kohana::$errors может быть записано что-то кроме булевого TRUE или FALSE?
OrmaJever
Отправлено: 10 Марта, 2014 - 23:02:02
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
nkl пишет:
Кажись я понял. var_dump ((bool) '') вернет нам bool(false), но var_dump ('') вернет нам string(0) ""; В данном случае это делается для явного указания типа данных который храниться в переменной $settings['profile'], так? Хотя если мы запишем в неё true, то делать это не обязательно, хотя с другой стороны, если мы сделаем так $settings['profile'] = '', то используя (bool)$settings['profile'] мы получим bool(false). Поправьте если я ошибаюсь.
конечно правильно.
nkl пишет:
Ох ты ж епт! Ни х себе я открытие для себя сделал! Так это даже если написать так var_dump((bool) 'asdasd') нам вернется bool(true)!!!
В этом и есть весь смысл приведения типов в php, с одной стороны он странный, с другой логичный.
nkl пишет:
Почему бы не написать просто if (Kohana::$errors) ? Или это своего рода защита от того, что в переменную Kohana::$errors может быть записано что-то кроме булевого TRUE или FALSE?
в данному куске кода видимых причин на приведения в логический тип нет, но наверное на то были причины (это я хоть как-то оправдываю разработчиков фреймворков )
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
nkl
Отправлено: 10 Марта, 2014 - 23:11:50
Посетитель
Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012
Помог: 1 раз(а)
Спасибо за пояснения. Теперь я могу идти спать, до завтрашних открытий
OrmaJever
Отправлено: 10 Марта, 2014 - 23:34:49
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
nkl пишет:
Теперь я могу идти спать, до завтрашних открытий
ох уж этот суровый мир, он так богат на открытия
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
nkl
Отправлено: 13 Марта, 2014 - 22:37:19
Посетитель
Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012
Помог: 1 раз(а)
Еще раз приветствую. В продолжении темы, хотелось бы спросить. Что значит self:: ? Например, вот тут оно используется:
public static function loadPackagesAndLog($className)
{
self::loadPackages($className);
printf("Class %s was loaded from %sn",$className,self::$_lastLoadedFilename);
}
}
OrmaJever
Отправлено: 13 Марта, 2014 - 22:42:37
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
обращение к статическим свойствам/методам текущего класса. сюда же можно добавить parent:: и static::, если где-то будете встречать то знайте что это из одной оперы.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.