ICollection - Получите единственное значение

Ошибка синтаксиса: ошибка синтаксиса, неожиданный T_VARIABLE

Возможный сценарий

Я не могу найти, где мой код поступил не так. Вот моя полная ошибка:

Ошибка анализа: ошибка синтаксиса, неожиданный T_VARIABLE в строке x

Что я пытаюсь

$sql = 'SELECT * FROM dealer WHERE id="'$id.'"';

Ответ

Ошибка анализа: проблема с синтаксисом вашей программы, например, оставляя точку с запятой от конца инструкции или, как и в случае выше, пропускает оператор ..

Простыми словами это синтаксическая ошибка, означающая, что в вашем коде есть что-то, что помешает правильному анализу и поэтому работает.

Что вам нужно сделать, так это внимательно проверить строки, где ошибка для любых простых ошибок.

Это сообщение об ошибке означает, что в строке x файла интерпретатор PHP ожидал увидеть открытую круглую скобку, но вместо этого он встретил нечто, называемое T_VARIABLE. Эта вещь T_VARIABLE называется token. Это способ интерпретации PHP-интерпретатора различных фундаментальных частей программ. Когда интерпретатор читает в программе, он переводит то, что вы написали, в список токенов. Где бы вы ни разместили переменную в своей программе, в списке интерпретатора есть токен T_VARIABLE.

Хорошо читается: Список токенов парсера

So убедитесь, что вы включили хотя бы E_PARSE в своем php.ini. Ошибки анализа не должны существовать в производственных сценариях.

Я всегда рекомендовал добавить следующий оператор при кодировании:

error_reporting(E_ALL);

Отчет об ошибках PHP

Также неплохо использовать среду IDE, которая позволит вам знать ошибки разбора при наборе текста. Вы можете использовать:

  1. NetBeans (прекрасный мир красоты, бесплатное программное обеспечение) (лучший, на мой взгляд)
  2. PhpStorm (дядя Гордон любит это: P, платный план, содержит проприетарное и бесплатное программное обеспечение)
  3. Eclipse (красота и зверь, бесплатное программное обеспечение)

Вопросы, относящиеся:

48
задан RBT 1 April 2018 в 08:29
поделиться

3 ответа

Linq, ребенок, да...

   var foo = myICollection.OfType<YourType>().FirstOrDefault();
    // or use a query
    var bar = (from x in myICollection.OfType<YourType>() where x.SomeProperty == someValue select x)
       .FirstOrDefault();
74
ответ дан Jack Allan 26 November 2019 в 18:43
поделиться

Без дженериков и потому что ICollection реализации IEnumerable можно сделать как в примере 1. С дженериками Вы простая потребность сделать как пример 2:

List<string> l = new List<string>();
l.Add("astring");

ICollection col1 = (ICollection)l;
ICollection<string> col2 = (ICollection<string>)l;

//example 1
IEnumerator e1 = col1.GetEnumerator();
if (e1.MoveNext())
    Console.WriteLine(e1.Current);

//example 2
if (col2.Count != 0)
    Console.WriteLine(col2.Single());
3
ответ дан bruno conde 26 November 2019 в 18:43
поделиться

Самый простой способ сделать это:

foreach(object o in collection) {
  return o;
}

, Но это не особенно эффективно, если это - на самом деле универсальный набор, потому что IEnumerator реализует IDisposable, таким образом, компилятор должен вставить попытку/наконец, с Расположением () призывают наконец блок.

, Если это - неуниверсальный набор, или Вы знаете, что универсальный набор ничего не реализует в Располагать () метод, тогда следующее может использоваться:

IEnumerator en = collection.GetEnumerator();
en.MoveNext();
return en.Current;

, Если Вы знаете, может ли реализовать IList, можно сделать это:

IList iList = collection as IList;
if (iList != null) {
  // Implements IList, so can use indexer
  return iList[0];
}
// Use the slower way
foreach (object o in collection) {
  return o;
}

Аналогично, если вероятно, что это будет иметь определенный тип Вашего собственного определения, которое имеет некоторый индексный доступ, можно использовать ту же технику.

21
ответ дан Chris 26 November 2019 в 18:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: