Это обычно происходит при непосредственном использовании функции с empty
.
Пример:
if (empty(is_null(null))) {
echo 'empty';
}
Это связано с тем, что empty
- это языковая конструкция, а не функция, она не может быть вызвана с выражением в качестве аргумента в версиях PHP до 5.5. До PHP 5.5 аргумент empty()
должен быть переменной , но произвольное выражение (такое как возвращаемое значение функции) допустимо в PHP 5.5 +.
empty
, несмотря на его имя, на самом деле не проверяет, является ли переменная «пустой». Вместо этого он проверяет, существует ли переменная, или == false
. Выражения (например, is_null(null)
в примере) всегда будут считаться существующими, поэтому здесь empty
проверяет только, равен ли он false. Здесь вы можете заменить empty()
на !
, например. if (!is_null(null))
, или явно сравнить с ложным, например. if (is_null(null) == false)
.
Вопросы, относящиеся
DateTime.TryParse
Это, которому я верю, быстрее, и это означает, что Вы не должны использовать ужасную попытку/выгоды:)
, например,
DateTime temp;
if(DateTime.TryParse(startDateTextBox.Text, out temp))
{
// Yay :)
}
else
{
// Aww.. :(
}
Не используйте исключения для управления потоком. Используйте DateTime. TryParse и DateTime. TryParseExact. Лично я предпочитаю TryParseExact с определенным форматом, но я предполагаю, что существуют времена, когда TryParse лучше. Использование в качестве примера на основе Вашего исходного кода:
DateTime value;
if (!DateTime.TryParse(startDateTextBox.Text, out value))
{
startDateTextox.Text = DateTime.Today.ToShortDateString();
}
Причины предпочтения этого подхода:
Что относительно того, чтобы использовать TryParse?
Я использовал бы DateTime. TryParse () метод: http://msdn.microsoft.com/en-us/library/system.datetime.tryparse.aspx
Проблема с использованием DateTime.TryParse
состоит в том, что оно не поддерживает очень общий вариант использования ввода данных дат, вводимых без разделителей, например, 011508
.
Вот пример того, как поддерживать это. (Это от платформы, которую я создаю, таким образом, ее подпись является немного странной, но логика ядра должна быть применимой):
private static readonly Regex ShortDate = new Regex(@"^\d{6}$");
private static readonly Regex LongDate = new Regex(@"^\d{8}$");
public object Parse(object value, out string message)
{
msg = null;
string s = value.ToString().Trim();
if (s.Trim() == "")
{
return null;
}
else
{
if (ShortDate.Match(s).Success)
{
s = s.Substring(0, 2) + "/" + s.Substring(2, 2) + "/" + s.Substring(4, 2);
}
if (LongDate.Match(s).Success)
{
s = s.Substring(0, 2) + "/" + s.Substring(2, 2) + "/" + s.Substring(4, 4);
}
DateTime d = DateTime.MinValue;
if (DateTime.TryParse(s, out d))
{
return d;
}
else
{
message = String.Format("\"{0}\" is not a valid date.", s);
return null;
}
}
}