php: использование define - PullRequest
       1

php: использование define

2 голосов
/ 03 февраля 2010

в Yii они используют этот код:

 defined('YII_DEBUG') or define('YII_DEBUG',true);

я никогда не видел, чтобы кто-нибудь писал так (или) раньшеэто реальный код php или какой-то синтаксис yii?

Ответы [ 3 ]

5 голосов
/ 03 февраля 2010

В основном, если defined("YII_DEBUG") оценивается как ложное, оно будет определять его.Вроде как:

mysql_connect() or die("DIE!!!!!");

Это фактический синтаксис PHP, просто обычно не используется.Это позволяет вам не писать:

if(!defined("YII_DEBUG"))
{
    define("YII_DEBUG", true);
}

или даже короче

if(!defined("YII_DEBUG"))
    define("YII_DEBUG", true);

Я предполагаю, что они использовали его, чтобы вообще избавиться от оператора if.Второй оператор if без скобок может быть опасен для редактирования, а первый может занять слишком много места для разработчика.

Лично я бы остался в стороне от этого только потому, что это необщеизвестная особенность.Используя общеизвестные синтаксисы (операторы if), другим программистам не нужно задумываться о том, что он делает.

(хотя, возможно, теперь я посмотрю на это. Это выглядит просто и избавляется от ненужных выражений if)

1 голос
/ 03 февраля 2010

Довольно просто - оператор 'или' эффективен в том смысле, что он будет оценивать вторую часть оператора только в случае необходимости. Поэтому, если первая часть имеет значение true (константа уже определена), вызов define () не выполняется.

1 голос
/ 03 февраля 2010

Это из-за оценки короткого замыкания.

Если defined('YII_DEBUG') возвращает false, оно попытается вычислить второе выражение, чтобы сделать предложение истинным, определив YII_DEBUG константу как true.

Окончательный результат состоит в том, что, если константа не была определена, то определите ее как true.Если оно уже определено (значение не имеет значения), то ничего не делать (так как первое выражение истинно, второе выражение не нужно оценивать, чтобы выражение имело значение true).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...